日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ElasticSearch的搜索建议功能suggest search(completion suggest)

發布時間:2024/3/26 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ElasticSearch的搜索建议功能suggest search(completion suggest) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

出自 圖靈學院 ElasticSearch課程, 我自己學完了,整理了一下,然后給老師說的話,記錄了一下,發了個博客
?

概述

suggest search(completion suggest):就是建議搜索或稱為搜索建議,也可以叫做自動完成-auto completion。類似百度中的搜索聯想提示功能。
?

ES實現suggest的時候,性能非常高,其構建的不是倒排索引,也不是正排索引,就是純的用于進行前綴搜索的一種特殊的數據結構,而且會全部放在內存中,所以suggest search進行的前綴搜索提示,性能是非常高。
?

需要使用suggest的時候,必須在定義index時,為其mapping指定開啟suggest。具體如下:
?

入門使用suggest search

創建

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"}}} }

插入三條測試數據

PUT /movie/_doc/1 { "title": "西游記電影系列", "content": "西游記之月光寶盒將與2021年進行......" }PUT /movie/_doc/2 { "title": "西游記文學系列", "content": "某知名網絡小說作家已經完成了大話西游同名小說的出版" }PUT /movie/_doc/3 { "title": "西游記之大話西游手游", "content": "網易游戲近日出品了大話西游經典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" : "網易游戲近日出品了大話西游經典IP的手游,正在火爆內測中"}},{"text" : "西游記文學系列","_index" : "movie","_type" : "_doc","_id" : "2","_score" : 1.0,"_source" : {"title" : "西游記文學系列","content" : "某知名網絡小說作家已經完成了大話西游同名小說的出版"}},{"text" : "西游記電影系列","_index" : "movie","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"title" : "西游記電影系列","content" : "西游記之月光寶盒將與2021年進行......"}}]}]} }

有沒有發現,結果都是以 “西游記” 開頭的, 當你輸入"西游記"的時候, ElasticSearch就直接給"西游記"開頭的數據都找出來給用戶展示.

如果你輸入"西游記手游" ,肯定是找不到的索引庫里面為 “title” : “西游記之大話西游手游”, 的數據
,因為 suggest search 和模糊搜索是不一樣的.因為suggest search 就是搜索以關鍵字開頭的文本,并沒有關鍵字在中間的.
?

比如說百度你搜索 “你好”, 出來的數據全都是你好開頭的數據.沒有開頭不帶"你好"的數據,中間帶"你好"的數據
?


?

GET /movie/_search {"suggest": {"my-suggest": {"prefix": "西游記手游","completion": {"field": "title.suggest"}}} }

總結

以上是生活随笔為你收集整理的ElasticSearch的搜索建议功能suggest search(completion suggest)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。