es查询简单场景问题小记
需求背景:將訂單表數據同步至es,實現根據訂單名稱、產品名稱、客戶姓名、客戶手機號、備注、供應商姓名進行模糊查詢
ps:整合springboot+RestHighLevelClient
關于操作es數據的工具類,網上一抓一大把,我也是隨便找了文章,修修改改直接用的
這篇文章主要是想記錄一下在查詢時遇到的問題
1、關于多條件or查詢,可以使用BoolQueryBuilder,must代表必須匹配的條件,should代表可匹配的條件,以下query語句的意思即為:查詢數據必須滿足匹配orgId的情況,但是name、telephone、remark三者匹配其一即可
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().must(QueryBuilders.termQuery("orgId", req.getOrgId())).should(QueryBuilders.matchPhraseQuery("name", req.getSearchWords())).should(QueryBuilders.wildcardQuery("telephone","*" + req.getSearchWords() + "*")).should(QueryBuilders.matchPhraseQuery("remark", req.getSearchWords())).minimumShouldMatch(1);2、關于手機號模糊搜索,只靠分詞是不能實現的,需要用到正則表達式查詢wildcardQuery
QueryBuilders.wildcardQuery("telephone","*" + req.getSearchWords() + "*")3、關于分詞器
對于中文,大部分情況都喜歡用ik分詞器,但是即使使用ik_maxword分詞器也并不能實現所有情況都能查回來,比如“門店客戶”可能會被分詞器拆分為“門店”、“客戶”、“門店客戶”,你輸入門,是無法查回來這條數據的,如果有這種場景,建議還是使用standard
4、關于使用match時搜索條件分詞的情況
我發現我輸入“門店”進行查詢,會查詢到查詢field包含“**門**” 、“**店**”、“**門**店**”的情況,但是這種數據不在我的搜索目標內,所以可以使用matchPhraseQuery,matchPhraseQuery只能匹配門店兩個詞必須相鄰的情景
總結
以上是生活随笔為你收集整理的es查询简单场景问题小记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring boot结合shiro实现
- 下一篇: Adobe XD 下载和安装教程