Elasticsearch--建议器
目錄
- 可用的建議器類型
- term建議器
- term建議器的配置選項
- phrase建議器
- completion建議器
在考慮性能的情況下,允許用戶的拼寫錯誤,以及構建一個自動完成功能
可用的建議器類型
- term:更正每個傳入的單詞,在非短語查詢中有用,比如單詞條查詢
- phrase:工作的短語上,返回一個恰當的短語
completion:提供高效的自動完成功能
包含建議器
在查詢的結果中獲得建議。例如,使用match_all查詢嘗試為serlock holnes短語得到一個建議,該短語包含兩個拼寫錯誤的詞條。
如果想要從多個字段上得到建議,可以加入second_suggestion(或者其他名字),當然與first_suggestion同一級別。響應如下:
{"suggest":{"first_suggestion":[{"text":"serlock","offset":0,"length":7,"option":[{"text":"sherlock","score":0.7866684,"freq":1}]},{"text":"honles","offset":8,"length":6,"option":[{"text":"holmes","score":0.7866684,"freq":1}]}]} }這里只保留了最重要的部分,前面還有其他的輸出信息。
term建議器為text參數中的每個詞條返回一個可能的建議列表。offset是原始單詞在text參數中的偏移量。
options數組包含了給定單詞的建議,如果elasticsearch沒有找到任何建議,它將為空。
- text:該屬性定義了建議的文本
- score:定義了建議的得分,得分越高,建議越好
- freq:建議的頻率,代表了在我們執行查詢的索引上,該單詞出現在文檔中的次數
term建議器
term建議器基于字符串的編輯距離。
term建議器的配置選項
term建議器的常見配置項還可以用在基于term建議器的所有建議器上,如phrase建議器
- text(必須):定義了希望得到建議的文本
- field(必須):為哪個字段生成建議
- analyzer:用于分析text參數提供的文本,如果不提供就使用field字段的分析器
- size:默認是5,指定text參數中每天詞條可以返回的建議的最大數字
sort:返回建議的排序方式,默認此選項設置成score,將首先按照得分排,然后按文檔頻率,最后按詞條排。第二個可能值frequency,先按文檔頻率,然后按分數,最后按詞條
額外建議器選項
- lowcase_terms:true時,把從text字段生成的所有經分析的詞條變成小寫
- max_edits:默認2,指定詞條允許的最大編輯距離,可選的值有1或2
- prefix_len:默認1,增加這個值可以提高整體性能,因為需要處理更少數量的建議
- min_word_len:默認4,指定返回的建議列表中詞條的最少字符數
shard_size:默認是size參數的值,設定每個分片上應該讀取的最大建議數量。如果設置的值比size參數的值大,會得到更準確的文檔頻率,但性能會降低
phrase建議器
term建議器基于詞條糾正錯誤,但對短語不夠好。phrase建議器基于term建議器,但添加了額外的短語計算邏輯。
{"suggest":{"text":"sherlock holnes","our_suggestion":{"phrase":{"field":"_all"}}} }返回結果
{"suggest":{"our_suggestion":[{"text":"sherlock holnes","offset":0,"length":15,"option":[{"text":"sherlock holmes","score":0.7866684}]}]} }與term返回相比,返回的是一個短語。
phrase建議器相比term建議器增加的額外選項。
- max_errors:指定可糾正的短語中包含錯誤詞條的最大數目、或最大百分比。可以設置成整型值或者0到1之間的浮點數。默認是1,意味著給點短語中最多包含1個錯誤拼寫的詞條。
completion建議器
該建議器允許創建自動完成功能,并且性能很好,這是因為可以在索引中存儲復雜結構,而不是在查詢時計算。
為了使用該基于前綴的建議器,需要建立索引時引入一個completion的專用字段。假設建立一個自動完成功能來顯示圖書的作者。除了作者的名字以外,希望返回該作者寫的圖書的標示符,先創建一個author索引:
使用completion類型定義ac字段,payload:隨建議一起返回一個額外的選項信息。
索引數據
先插入兩條數據
input屬性提供了建議器用來生成自動完成功能的輸入信息,它將用于匹配用戶的輸入,output屬性定義應該為文檔返回什么數據
查詢索引中那個completion建議器數據
想找作者名字以fyo開頭的文檔,可以執行
可以看到,我們在_suggest端點執行命令,因為不想執行標準查詢,只對自動完成結果感興趣。執行結果如下:
也可使用模糊查詢來容忍拼寫錯誤,在查詢中包含一個額外的fuzzy節點。
定制權重
默認情況下,詞頻將用來決定前綴建議器返回文檔的權重,然而這有時不是最好的方案,可以通過為定義成completion的字段指定一個weight屬性來定義建議的權重。weight屬性是一個整型值,越大建議越重要。為一個文檔指定權重,命令如下:
匹配到該文檔的completion建議結果中該文檔的權重都會是30。
轉載于:https://www.cnblogs.com/51zone/p/9841009.html
總結
以上是生活随笔為你收集整理的Elasticsearch--建议器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【python+beautifulsou
- 下一篇: 最小生成树 次小生成树