專案中,需要精確查詢的乙個es欄位,為text型別,text是要被分詞的,整個字串根據一定規則分解乙個個term。因此一般情況下,text型別的字段,不能精確查詢,keyword型別的可以使用termquery查詢。
這種情況下可以使用matchphraseprefixquery(...)來精確查詢被分詞的字段,然後再過濾一次。
**如下:
public long countbyaddress(string address) ;
searchsourcebuilder.fetchsource(querycolumnarray, null);
boolquerybuilder boolquerybuilder = new boolquerybuilder();
boolquerybuilder.must(querybuilder);
searchsourcebuilder.query(boolquerybuilder);
searchrequest.source(searchsourcebuilder);
searchresponse response = null;
try catch (ioexception e)
long count=0;
for(searchhit hit : response.gethits().gethits())
}return count;
}
上面的**邏輯是查詢有多少相同的位址。除了使用matchphraseprefixquery(...),還需使用equals或者length再做一次過濾。 es拼音分詞 大帥哥 ES查詢優化之中文分詞優化
中文的搜尋和英文的搜尋最大不同之處在於分詞,英文分詞可以通過空格,而中文的分詞則複雜很多,分詞會直接影響使用者的搜尋使用體驗,在一些大公司甚至會使用機器學習的方式進行分詞。在這篇文章中筆者主要講解es中文分詞相關的優化。網路上經常會出現一些新詞,比如 藍瘦香菇 藍瘦香菇預設情況下會被分詞,分詞結果如...
es 字段預設設為 keyword 便於查詢
改變analyzer的type為keyword 1 在elasticsearch.yml中加上 index analysis analyzer default type keyword 或index.analysis.analyzer.default.type keyword 將如上內容填到elas...
es中查詢API使用
1 boolquerybuilder中 must與should區別 must的兩個條件都必須滿足,should中的兩個條件至少滿足乙個就可以 must相當於and,should相當於or 2 querybuilders中matchquery與termquery termsquery區別 match ...