記錄ElasticSearch模糊查詢


sourceBuilder.query(QueryBuilders.fuzzyQuery("name", "李").fuzziness(Fuzziness.ZERO));

版本:ElasticSearch7.8


fuzzyQuery 返回包含與搜索字詞相似的字詞文檔:

為了找到相似的術語,fuzzy查詢將在指定的編輯距離內創建一組搜索詞的所有可能的變體或擴展,查詢然后返回每個擴展的完全匹配。

如果search.allow_expensive_queries 設置為false,則不會執行模糊查詢。

編輯距離,是將一個術語轉換成另一個術語所需更改一個字符的次數(Levenshtein編輯距離衡量)。這些更改可以包括:
更改字符,box → fox
刪除字符,black → lack
插入字符,sic → sick
轉置兩個字符,act → cat
為了查找相似的術語,模糊查詢會創建一個集合用來列舉所有可能的變體和擴展,染灰返回每個擴展的完全匹配。


Fuzziness
一些搜索和API支持的參數,允許進行不精確的模糊查詢,參數為fuzziness

在查詢text或是keyword時,fuzziness被解釋為Levenshtein編輯距離(一個字符串要與另一個字符串相同必須更改的一個字符數),fuzziness可以為0,1,2(Levenshtein允許的最大編輯距離(或編輯次數));

AUTO:根據術語長度生成編輯距離。可以選擇提過距離參數AUTO: [low], [high]。如果未指定則默認為AUTO: [3], [6];AUTO通常應該是fuzziness。

0-2 必須完全匹配
3-5 允許一次編輯
大於5 允許兩次編輯

如上查詢,結果是
{"name":"李元浩","sex":"小gay虎","tel":"2200"}

如果設為 Fuzziness.ONE :

sourceBuilder.query(QueryBuilders.fuzzyQuery("name", "李").fuzziness(Fuzziness.ONE));

結果:

{"name":"李元浩","sex":"小gay虎","tel":"2200"}
{"name":"一號","sex":"男","tel":"4396"}
{"name":"二號","sex":"男","tel":"2800"}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM