Elasticsearch QueryStringQueryBuilder 检索问题

  • Post author:
  • Post category:其他


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

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

default

,

default_index

,

default_search

的analyzer。

ES内置的一些analyzer。

analyzer logical name description
standard analyzer standard standard tokenizer, standard filter, lower case filter, stop filter
simple analyzer simple lower case tokenizer
stop analyzer stop lower case tokenizer, stop filter
keyword analyzer keyword 不分词,内容整体作为一个token(not_analyzed)
pattern analyzer whitespace 正则表达式分词,默认匹配\W+
language analyzers
lang
各种语言
snowball analyzer snowball standard tokenizer, standard filter, lower case filter, stop filter, snowball filter
custom analyzer custom 一个Tokenizer, 零个或多个Token Filter, 零个或多个Char Filter

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

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

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

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



版权声明:本文为u013795975原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。