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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍)

發布時間:2024/4/13 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、查詢建議介紹

?1. 查詢建議是什么?

查詢建議,為用戶提供良好的使用體驗。主要包括: 拼寫檢查; 自動建議查詢詞(自動補全)

?拼寫檢查如圖:

自動建議查詢詞(自動補全):

?

2. ES中查詢建議的API

?查詢建議也是使用_search端點地址。在DSL中suggest節點來定義需要的建議查詢

?示例1:定義單個建議查詢詞

POST twitter/_search {"query" : {"match": {"message": "tring out Elasticsearch"}},"suggest" : { <!-- 定義建議查詢 -->"my-suggestion" : { <!-- 一個建議查詢名 -->"text" : "tring out Elasticsearch", <!-- 查詢文本 -->"term" : { <!-- 使用詞項建議器 -->"field" : "message" <!-- 指定在哪個字段上獲取建議詞 -->}}} }

示例2:定義多個建議查詢詞

POST _search {"suggest": {"my-suggest-1" : {"text" : "tring out Elasticsearch","term" : {"field" : "message"}},"my-suggest-2" : {"text" : "kmichy","term" : {"field" : "user"}}} }

示例3:多個建議查詢可以使用全局的查詢文本

POST _search {"suggest": {"text" : "tring out Elasticsearch","my-suggest-1" : {"term" : {"field" : "message"}},"my-suggest-2" : {"term" : {"field" : "user"}}} }

二、Suggester 介紹

1. Term suggester

term 詞項建議器,對給入的文本進行分詞,為每個詞進行模糊查詢提供詞項建議。對于在索引中存在詞默認不提供建議詞,不存在的詞則根據模糊查詢結果進行排序后取一定數量的建議詞。

常用的建議選項:

示例1:

POST twitter/_search {"query" : {"match": {"message": "tring out Elasticsearch"}},"suggest" : { <!-- 定義建議查詢 -->"my-suggestion" : { <!-- 一個建議查詢名 -->"text" : "tring out Elasticsearch", <!-- 查詢文本 -->"term" : { <!-- 使用詞項建議器 -->"field" : "message" <!-- 指定在哪個字段上獲取建議詞 -->}}} }

?2. phrase suggester

phrase 短語建議,在term的基礎上,會考量多個term之間的關系,比如是否同時出現在索引的原文里,相鄰程度,以及詞頻等

?示例1:

POST /ftq/_search {"query": {"match_all": {}},"suggest" : {"myss":{"text": "java sprin boot","phrase": {"field": "title"}}} }

?結果1:

{"took": 177,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 2,"max_score": 1,"hits": [{"_index": "ftq","_type": "_doc","_id": "2","_score": 1,"_source": {"title": "java spring boot","content": "lucene is writerd by java"}},{"_index": "ftq","_type": "_doc","_id": "1","_score": 1,"_source": {"title": "lucene solr and elasticsearch","content": "lucene solr and elasticsearch for search"}}]},"suggest": {"myss": [{"text": "java sprin boot","offset": 0,"length": 15,"options": [{"text": "java spring boot","score": 0.20745796}]}]} }

?3. Completion suggester? ?自動補全

針對自動補全場景而設計的建議器。此場景下用戶每輸入一個字符的時候,就需要即時發送一次查詢請求到后端查找匹配項,在用戶輸入速度較高的情況下對后端響應速度要求比較苛刻。因此實現上它和前面兩個Suggester采用了不同的數據結構,索引并非通過倒排來完成,而是將analyze過的數據編碼成FST和索引一起存放。對于一個open狀態的索引,FST會被ES整個裝載到內存里的,進行前綴查找速度極快。但是FST只能用于前綴查找,這也是Completion Suggester的局限所在。

?官網鏈接:

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html

?為了使用自動補全,索引中用來提供補全建議的字段需特殊設計,字段類型為 completion。

PUT music {"mappings": {"_doc" : {"properties" : {"suggest" : { <!-- 用于自動補全的字段 -->"type" : "completion"},"title" : {"type": "keyword"}}}} }

Input 指定輸入詞 Weight 指定排序值(可選)

PUT music/_doc/1?refresh {"suggest" : {"input": [ "Nevermind", "Nirvana" ],"weight" : 34} }

?指定不同的排序值:

PUT music/_doc/1?refresh {"suggest" : [{"input": "Nevermind","weight" : 10},{"input": "Nirvana","weight" : 3}]}

?放入一條重復數據

PUT music/_doc/2?refresh {"suggest" : {"input": [ "Nevermind", "Nirvana" ],"weight" : 20} }

?示例1:查詢建議根據前綴查詢:

POST music/_search?pretty {"suggest": {"song-suggest" : {"prefix" : "nir", "completion" : { "field" : "suggest" }}} }

結果1:

{"took": 25,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 0,"max_score": 0,"hits": []},"suggest": {"song-suggest": [{"text": "nir","offset": 0,"length": 3,"options": [{"text": "Nirvana","_index": "music","_type": "_doc","_id": "2","_score": 20,"_source": {"suggest": {"input": ["Nevermind","Nirvana"],"weight": 20}}},{"text": "Nirvana","_index": "music","_type": "_doc","_id": "1","_score": 1,"_source": {"suggest": ["Nevermind","Nirvana"]}}]}]} }

?示例2:對建議查詢結果去重

POST music/_search?pretty {"suggest": {"song-suggest" : {"prefix" : "nir", "completion" : { "field" : "suggest","skip_duplicates": true }} }}

?結果2:

{"took": 4,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 0,"max_score": 0,"hits": []},"suggest": {"song-suggest": [{"text": "nir","offset": 0,"length": 3,"options": [{"text": "Nirvana","_index": "music","_type": "_doc","_id": "2","_score": 20,"_source": {"suggest": {"input": ["Nevermind","Nirvana"],"weight": 20}}}]}]} }

?示例3:查詢建議文檔存儲短語

PUT music/_doc/3?refresh {"suggest" : {"input": [ "lucene solr", "lucene so cool","lucene elasticsearch" ],"weight" : 20} }PUT music/_doc/4?refresh {"suggest" : {"input": ["lucene solr cool","lucene elasticsearch" ],"weight" : 10} }

?查詢3:

POST music/_search?pretty {"suggest": {"song-suggest" : {"prefix" : "lucene s", "completion" : { "field" : "suggest" ,"skip_duplicates": true}}} }

結果3:

{"took": 3,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 0,"max_score": 0,"hits": []},"suggest": {"song-suggest": [{"text": "lucene s","offset": 0,"length": 8,"options": [{"text": "lucene so cool","_index": "music","_type": "_doc","_id": "3","_score": 20,"_source": {"suggest": {"input": ["lucene solr","lucene so cool","lucene elasticsearch"],"weight": 20}}},{"text": "lucene solr cool","_index": "music","_type": "_doc","_id": "4","_score": 10,"_source": {"suggest": {"input": ["lucene solr cool","lucene elasticsearch"],"weight": 10}}}]}]} }

?

轉載于:https://www.cnblogs.com/leeSmall/p/9206646.html

總結

以上是生活随笔為你收集整理的elasticsearch系列五:搜索详解(查询建议介绍、Suggester 介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。

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