ES模糊查詢失效的坑以及解決方案
項(xiàng)目場(chǎng)景:
最近在做需求開(kāi)發(fā)的時(shí)候,有個(gè)需求,需要根據(jù)關(guān)鍵字去ES中進(jìn)行模糊搜索。于是首先想到了wildcard查詢,根據(jù)關(guān)鍵字,利用*通配符,類似于mysql中的like一樣進(jìn)行模糊搜索。
問(wèn)題描述
但是遇到了問(wèn)題就是,根據(jù)單個(gè)漢字能正常模糊搜索,多個(gè)漢字就無(wú)法查詢出數(shù)據(jù)。單個(gè)漢字正常查詢:

多個(gè)漢字無(wú)法查出數(shù)據(jù):

于是我就百度找解決方案,很多人說(shuō)都說(shuō)在查詢關(guān)鍵字后面加 .keyword 就可以正常查詢了,于是我接著嘗試,

結(jié)果還是不能正常查詢,而且原來(lái)單個(gè)漢字能查詢的,現(xiàn)在也不行了

原因分析:
于是我懷疑是字段類型導(dǎo)致的,就有了下面這個(gè)我自己建的blog的測(cè)試索引。

咱們現(xiàn)在只關(guān)心索引中的name,newName1,newName2,newName3這4個(gè)字段,可以看到這4個(gè)字段的數(shù)據(jù)類型不同?,F(xiàn)在創(chuàng)建一條數(shù)據(jù),

根據(jù)name模糊查詢


可以看到在keyword類型下,無(wú)論單個(gè)漢字,還是多個(gè)漢字都可以正常查詢
- newName1的類型為text,最上面就是這種情況,單個(gè)漢字可以,多個(gè)漢字不行
- newName2的類型為wildcard,跟keyword情況一樣


- newName3的類型為text,但是附加了keyword類型
單個(gè)漢字正常查詢

多個(gè)漢字不能查詢

加上keyword可以正常查詢

總結(jié):
- text類型,es會(huì)分詞導(dǎo)致多個(gè)漢字不能正常正常查詢
- keyword不分詞可以正常查詢
- wildcard和keyword類似
- text類型附加keyword類型,相當(dāng)于支持兩種類型,默認(rèn)text,但是可以通過(guò)關(guān)鍵字加.keyword變成keyword類型
到此這篇關(guān)于ES模糊查詢失效的坑以及解決方案的文章就介紹到這了,更多相關(guān)ES模糊查詢失效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot?接口需要接收參數(shù)類型是數(shù)組問(wèn)題
這篇文章主要介紹了Springboot?接口需要接收參數(shù)類型是數(shù)組問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
SpringBoot系列教程JPA之基礎(chǔ)環(huán)境搭建的方法
這篇文章主要介紹了SpringBoot系列教程JPA之基礎(chǔ)環(huán)境搭建的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Java編程實(shí)現(xiàn)比對(duì)兩個(gè)文本文件并標(biāo)記相同與不同之處的方法
這篇文章主要介紹了Java編程實(shí)現(xiàn)比對(duì)兩個(gè)文本文件并標(biāo)記相同與不同之處的方法,涉及java針對(duì)文本文件的讀取、遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
SpringBoot中Jackson ObjectMapper應(yīng)用及說(shuō)明
SpringBoot支持支持Jackson作為默認(rèn)的JSON映射庫(kù),提供便捷的對(duì)象與JSON轉(zhuǎn)換功能,文章詳細(xì)介紹了ObjectMapper的配置與使用,以及SpringBoot中Jackson的多種自定義配置方法2026-05-05
java實(shí)現(xiàn)本地日期時(shí)間處理
這篇文章主要介紹了本地日期時(shí)間處理的程序,實(shí)現(xiàn)了下面的功能,大家參考使用吧2014-01-01
Springboot項(xiàng)目由JDK8升級(jí)至JDK17詳細(xì)教程
這篇文章主要為大家詳細(xì)介紹了Springboot項(xiàng)目如何由JDK8升級(jí)至JDK17,本文為大家整理了全過(guò)程的詳細(xì)步驟,有需要的小伙伴可以參考一下2025-06-06
SpringCloud OpenFeign超詳細(xì)講解模板化遠(yuǎn)程通信的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloudSpringboot集成OpenFeign實(shí)現(xiàn)模板化遠(yuǎn)程通信,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2022-07-07

