ElasticSearch模糊查询疑问:为何*toco*有结果而*omme*无结果?
ElasticSearch通配符查询结果差异原因解析
核心原因
这种查询结果差异的本质是:ElasticSearch的通配符查询(如*xxx*)是在字段分词后的倒排索引词项中匹配,而非直接匹配原始字段的字符串内容。
具体拆解
假设你的字段258是text类型,使用默认的standard分词器:
- 原始值
PhotoComment会被分词器拆分为两个独立的词项:photo和comment(standard分词器会将驼峰式的大写字母识别为分词边界)。 - 第一个查询
*toco*:能命中是因为某个分词后的词项包含toco子串——如果是未拆分驼峰的合并分词,photocomment这个词项里包含toco(photo末尾的to+comment开头的co);如果是拆分后的词项,也可能你的实际字段值本身包含toco片段。 - 第二个查询
*omme*:返回空是因为所有分词后的词项都不包含omme子串——拆分后的comment词项是c-o-m-m-e-n-t,仅包含omm子串,并不存在完整的omme(需要以o开头后跟mme);photo词项里更没有这个子串。
如果你的字段258是keyword类型(不分词),则可能是大小写敏感导致:字段值PhotoComment中的C是大写,导致子串是Comm e,无法匹配小写的*omme*查询。
内容的提问来源于stack exchange,提问作者d7d1cd
相关产品推荐
相关产品推荐

