ES模糊查詢失效的坑以及解決方案
項目場景:
最近在做需求開發(fā)的時候,有個需求,需要根據(jù)關(guān)鍵字去ES中進行模糊搜索。于是首先想到了wildcard查詢,根據(jù)關(guān)鍵字,利用*通配符,類似于mysql中的like一樣進行模糊搜索。
問題描述
但是遇到了問題就是,根據(jù)單個漢字能正常模糊搜索,多個漢字就無法查詢出數(shù)據(jù)。單個漢字正常查詢:
多個漢字無法查出數(shù)據(jù):
于是我就百度找解決方案,很多人說都說在查詢關(guān)鍵字后面加 .keyword 就可以正常查詢了,于是我接著嘗試,
結(jié)果還是不能正常查詢,而且原來單個漢字能查詢的,現(xiàn)在也不行了
原因分析:
于是我懷疑是字段類型導(dǎo)致的,就有了下面這個我自己建的blog的測試索引。
咱們現(xiàn)在只關(guān)心索引中的name,newName1,newName2,newName3這4個字段,可以看到這4個字段的數(shù)據(jù)類型不同。現(xiàn)在創(chuàng)建一條數(shù)據(jù),
根據(jù)name模糊查詢
可以看到在keyword類型下,無論單個漢字,還是多個漢字都可以正常查詢
- newName1的類型為text,最上面就是這種情況,單個漢字可以,多個漢字不行
- newName2的類型為wildcard,跟keyword情況一樣
- newName3的類型為text,但是附加了keyword類型
單個漢字正常查詢
多個漢字不能查詢
加上keyword可以正常查詢
總結(jié):
- text類型,es會分詞導(dǎo)致多個漢字不能正常正常查詢
- keyword不分詞可以正常查詢
- wildcard和keyword類似
- text類型附加keyword類型,相當于支持兩種類型,默認text,但是可以通過關(guān)鍵字加.keyword變成keyword類型
到此這篇關(guān)于ES模糊查詢失效的坑以及解決方案的文章就介紹到這了,更多相關(guān)ES模糊查詢失效內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA創(chuàng)建Java項目保姆級教程(超詳細!)
這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建Java項目保姆級教程的相關(guān)資料,Java是一種廣泛使用的編程語言,廣泛用于Web應(yīng)用程序和客戶端應(yīng)用程序的開發(fā),文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-09-09SpringBoot對靜態(tài)資源的映射規(guī)則詳解解讀
這篇文章主要介紹了SpringBoot對靜態(tài)資源的映射規(guī)則詳解解讀,在Spring Boot中,映射規(guī)則是用來定義URL與控制器方法之間的映射關(guān)系的,通過映射規(guī)則,可以將特定的URL請求映射到相應(yīng)的控制器方法上,從而實現(xiàn)請求的處理和響應(yīng)的返回,需要的朋友可以參考下2023-10-10基于params、@PathVariabl和@RequestParam的用法與區(qū)別說明
這篇文章主要介紹了方法參數(shù)相關(guān)屬性params、@PathVariabl和@RequestParam用法與區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08