Elasticsearch QueryStringQueryBuilder 检索问题

在使用QueryStringQueryBuilder时,发现传入的搜索条件时,有时候会搜索出完全不包含该关键字的数据,翻阅了相关资料,发现是QueryStringQueryBuilder 使用的默认的分词导致的。

在没有给QueryStringQueryBuilder 指定特定的分词器时,ES会用默认的analyzer来处理,也就是名字(logical name)为defaultdefault_indexdefault_search的analyzer。

ES内置的一些analyzer。

analyzerlogical namedescription
standard analyzerstandardstandard tokenizer, standard filter, lower case filter, stop filter
simple analyzersimplelower case tokenizer
stop analyzerstoplower case tokenizer, stop filter
keyword analyzerkeyword不分词,内容整体作为一个token(not_analyzed)
pattern analyzerwhitespace正则表达式分词,默认匹配\W+
language analyzerslang各种语言
snowball analyzersnowballstandard tokenizer, standard filter, lower case filter, stop filter, snowball filter
custom analyzercustom一个Tokenizer, 零个或多个Token Filter, 零个或多个Char Filter

 

这个情况会使ES检索时,会对中文进行最小粒度的切分,例如:

new QueryStringQueryBuilder("客服").field("title").defaultOperator(Operator.AND);

则ES检索时,会将“客服” 拆分成 “客”,“服”,检索的结果为title中有 “客”,“服”两个字的即可,不需要两个字相邻,如果需要检索包含“客服”的,则需要写成:new QueryStringQueryBuilder("\""+客服+"\"").field("title").defaultOperator(Operator.AND);

加上 双引号 表示强制要求 拆分一起

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值