Es查詢問題研究

2021-10-01 18:37:54 字數 1021 閱讀 7498

今天在做es查詢的時候,我們查詢的結果和我們預期的不一樣,原因是es預設給分詞處理了。

比如:

},},

es中存的值是這樣的,但是我們的查詢**是這樣的。

matchquerybuilder matchquerybuilder = new matchquerybuilder("name", name);

// iterableiterable = commodityrepository.search(matchquerybuilder);

iterable.foreach(e->list.add(e));

matchquerybuilder輸入的詞條

會被es解析並進行分詞,在此過程中就已經轉換成全小寫。(es在儲存欄位時,已做解析、分詞和小寫處理。看見的是大寫的字段內容,實際在es裡已經被當作小寫進行處理)

因為es預設進行了分詞後查詢的操作,所以我們的name查詢的時候,即便輸入「麵包網」,也可以查詢出這二條記錄。

現在我們要實現只包含【麵包網】這三個字的結果,怎麼辦?

termsquerybuilder matchquerybuilder = new termsquerybuilder("name", name);
termsquerybuilder這個就是不分詞查詢的辦法,替換這樣的查詢就可以了。

termquerybuilder:

詞條查詢是elasticsearch的乙個簡單查詢。它僅匹配在給定欄位中含有該詞條的文件,而且是確切的、未經分析的詞條。term查詢會查詢我們設定的準確值。term查詢本身很簡單,它接受乙個欄位名和我們希望查詢的值。

termsquerybuilder:

詞條查詢(term query)允許匹配單個未經分析的詞條,多詞條查詢(terms query)可以用來匹配多個這樣的詞條。只要指定字段包含任一我們給定的詞條,就可以查詢到該文件。

es模糊查詢的問題

今天在遇到es查詢的時候,遇到了難點,花了半天才發現問題原因。需求是 es實現模糊查詢。相當於sql中的like 像 一樣。但是在開發過程中,我使用了各種分詞,各種查詢 總是實現不了。問題 比如 我查詢切片麵包可以查詢出來,但是我查詢切麵包就查詢不出來。原因是es預設採用了分詞機制,導致我查詢的時候...

es 父子查詢 es父子文件建立查詢

一 準備 1,elasticsearch 5.6.9 2,kibana 5.6.9 3,jdk1.8 二 建立索引,文件 1建立資料庫put database?pretty station stationname 三 填充資料 插入父文件一條記錄 插入id 1的6路post database lin...

ES查詢語句

1.萬用字元查詢keyword欄位 不會建分詞索引,會建索引 2.刪除並釋放磁碟空間 post monitor delete by query 1.查詢你要刪除的doc資料 以2019 5 18 00 00 00時間節點和time欄位為例 具體 如下 monitor search post 2.手動...