ElasticSearch的搜索建议功能suggest search(completion suggest)
出自 圖靈學院 ElasticSearch課程, 我自己學完了,整理了一下,然后給老師說的話,記錄了一下,發(fā)了個博客
?
概述
suggest search(completion suggest):就是建議搜索或稱為搜索建議,也可以叫做自動完成-auto completion。類似百度中的搜索聯(lián)想提示功能。
?
ES實現(xiàn)suggest的時候,性能非常高,其構建的不是倒排索引,也不是正排索引,就是純的用于進行前綴搜索的一種特殊的數(shù)據(jù)結構,而且會全部放在內存中,所以suggest search進行的前綴搜索提示,性能是非常高。
?
需要使用suggest的時候,必須在定義index時,為其mapping指定開啟suggest。具體如下:
?
入門使用suggest search
創(chuàng)建
PUT /movie {"mappings": {"properties": {"title": {"type": "text","analyzer": "ik_max_word","fields": {"suggest": { //這個名字可以隨便起,這里取名為suggest"type": "completion", //類型是completion,就是自動補全"analyzer": "ik_max_word" //采用的分詞器}}},"content": {"type": "text","analyzer": "ik_max_word"}}} }插入三條測試數(shù)據(jù)
PUT /movie/_doc/1 { "title": "西游記電影系列", "content": "西游記之月光寶盒將與2021年進行......" }PUT /movie/_doc/2 { "title": "西游記文學系列", "content": "某知名網(wǎng)絡小說作家已經(jīng)完成了大話西游同名小說的出版" }PUT /movie/_doc/3 { "title": "西游記之大話西游手游", "content": "網(wǎng)易游戲近日出品了大話西游經(jīng)典IP的手游,正在火爆內測中" }suggest 搜索:
GET /movie/_search {"suggest": {//這個字段是關鍵字,不能隨便起名"my-suggest": { // 這個是自己起的名字"prefix": "西游記", // 這個是前綴"completion": {"field": "title.suggest" //這個是你自己定義的索引}}} }“field”: “title.suggest”:是你自己定義的索引
?
結果:
{"took" : 312,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 0,"relation" : "eq"},"max_score" : null,"hits" : [ ]},"suggest" : {"my-suggest" : [{"text" : "西游記","offset" : 0,"length" : 3,"options" : [{"text" : "西游記之大話西游手游","_index" : "movie","_type" : "_doc","_id" : "3","_score" : 1.0,"_source" : {"title" : "西游記之大話西游手游","content" : "網(wǎng)易游戲近日出品了大話西游經(jīng)典IP的手游,正在火爆內測中"}},{"text" : "西游記文學系列","_index" : "movie","_type" : "_doc","_id" : "2","_score" : 1.0,"_source" : {"title" : "西游記文學系列","content" : "某知名網(wǎng)絡小說作家已經(jīng)完成了大話西游同名小說的出版"}},{"text" : "西游記電影系列","_index" : "movie","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"title" : "西游記電影系列","content" : "西游記之月光寶盒將與2021年進行......"}}]}]} }有沒有發(fā)現(xiàn),結果都是以 “西游記” 開頭的, 當你輸入"西游記"的時候, ElasticSearch就直接給"西游記"開頭的數(shù)據(jù)都找出來給用戶展示.
如果你輸入"西游記手游" ,肯定是找不到的索引庫里面為 “title” : “西游記之大話西游手游”, 的數(shù)據(jù)
,因為 suggest search 和模糊搜索是不一樣的.因為suggest search 就是搜索以關鍵字開頭的文本,并沒有關鍵字在中間的.
?
比如說百度你搜索 “你好”, 出來的數(shù)據(jù)全都是你好開頭的數(shù)據(jù).沒有開頭不帶"你好"的數(shù)據(jù),中間帶"你好"的數(shù)據(jù)
?
?
總結
以上是生活随笔為你收集整理的ElasticSearch的搜索建议功能suggest search(completion suggest)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html-盒子模型
- 下一篇: teamviewer 安卓版本提示无法连