使用者會經常不小心或者記不太清自己所要搜尋的詞,而導致在查詢過程中輸入一些錯字,這時通過elasticsearch的模糊查詢來處理輸入的錯字,非常有利於提高使用者的搜尋體驗。
在查詢過程中,如果沒有使用模糊查詢,如果我輸入的詞中有錯詞,我們一般是很難通過匹配查詢到想要的結果。讓我們首先舉個例子,錯字"elastoc":
get /test_index/_search}}}
這時我們是查詢得不到結果的,因為這個單詞不在test_index索引中。
使用fuzzy query時,查詢的詞可以不用與倒排索引中詞完全匹配。
get /test_index/_search}}}
, ...}
可以看到查詢得到了相應返回得到一條資料 ("sucessful": 1),這就是模糊查詢的好處。
"auto"
在"fuzziness"
欄位中使用值,elasticsearch 將確定合適的模糊距離。對於6個字元,預設情況下,elasticsearch將允許2個編輯距離。"auto"
模糊性較為可取,但您可以根據需要使用準確的數字進行調整。你也可以指定"fuzziness"
欄位中的值:
get /test_index/_search}}}
get /test_index/_search}}}}
沒有查詢結果返回。
fuzzy query 的工作原理與 term query 類似,對所要查詢的內容不會進行分析。
例如,我們在索引中新增內容 "elastic kibana" ,通過分析器檢視,standard_analyzer 會產生兩個項,"elastic" 和 "kibana"
使用 _analyze檢視 "elastic kibana"
post /test_index/_analyze
, ]}
模糊查詢 "elastoc kibaoa"如果這個使用fuzzy query進行查詢會的得不到想要的結果,如下:
post /test_index/_search}}}
沒有相應查詢結果得到。
模糊查詢 "elastoc"
post /test_index/_search}}}
, "hits" : , ....}
成功返回,失敗 0
匹配查詢結合模糊引數
如果在匹配查詢中結合模糊引數是非常方便查詢的事。分析器將先分析您的查詢,然後再將其搜尋到倒排索引中。這樣在相應的fuzziness
值下可以得到我們想要的結果:
get /test_index/_search}}}
也得到了相關的結果返回。
重點:查詢的term和倒排索引中的term是區分大小寫,比如:kibana與kibano的距離為:2
如果我們查詢 elastoc kibano,它與elastic kibana之間相差 2:但是請注意我們使用如下可以查詢到相應結果。我們可以嘗試查詢"elastoc kibano"
與"elastic kibana"
之間編輯距離差為:2,在查詢中"fuzziness":1
,也返回了結果,查詢是根據詞條"elastoc"
和"kibano"
分析器進行分析的。
適當調整模糊查詢的引數,可以提高查詢中的使用者體驗,查詢到想要的結果。
fuzziness 是fuzzy query的核心。
我們傳遞給此引數的值是允許的最大距離。
我們可以傳遞兩種型別的值,即用於精確最大距離的整數和"auto"
。
該"auto"
值允許查詢中的模糊性是動態的。
我們可以在"auto"
值中調整2個引數並將其寫為"auto:[low],[high]"
。如果字詞長度低於下限值,則查詢會將模糊性設定為0。如果term
長度在低值和高值之間,則查詢將模糊性設定為1。最後,如果term
長度大於高值,則查詢將fuzziness
設定為 2。如果未確定低值和高值,使用預設值3
和6
。
transpositions
將允許您的查詢將兩個相鄰字元(ab-> ba)的換位計算為1個距離。
max_expansions
將確定您從查詢中獲得的最大結果。如果max_expansions
設定為:1,並且elasticsearch中有2個文件匹配到查詢,則elasticsearch將僅返回其中乙個文件。請注意,這max_expansions
適用於分片級別。因此,如果elasticsearch中有很多分片,即使max_expansion
為1,查詢也可能返回更多結果。(預設值為max_expansions 為
50)
prefix_length
是模糊查詢中不考慮的字首字元數。
如果你需要看本文中查詢語句**,可以到我的girhub上去看看呀,裡面有關於本文更詳細的內容。在搜尋中我們使用模糊查詢是會非常有利於提高使用者的體驗感的喲,如果沒有試過的夥伴,建議可以自己手動操作下呀~ღ( ´・ᴗ・` )
es模糊查詢的問題
今天在遇到es查詢的時候,遇到了難點,花了半天才發現問題原因。需求是 es實現模糊查詢。相當於sql中的like 像 一樣。但是在開發過程中,我使用了各種分詞,各種查詢 總是實現不了。問題 比如 我查詢切片麵包可以查詢出來,但是我查詢切麵包就查詢不出來。原因是es預設採用了分詞機制,導致我查詢的時候...
mysql模糊查詢 MYSQL模糊查詢
mysql提供標準的sql模式匹配,以及一種基於象unix實用程式如vi grep和sed的擴充套件正規表示式模式匹配的格式。一 sql模式 sql的模式匹配允許你使用 匹配任何單個字元,而 匹配任意數目字元 包括零個字元 在 mysql中,sql的模式預設是忽略大小寫的。下面顯示一些例子。注意在你...
cad模糊查詢符號 sql模糊查詢
sql模糊查詢的語法為 select column from table where column like pattern sql提供了四種匹配模式 1.表示任意0個或多個字元。如下語句 select from user where name like 三 將會把name為 張三 三腳貓 唐三藏 ...