Elasticsearch单词查询结果少于精准查询的问题咨询
以下是几种最可能导致该现象的原因:
查询字段范围有限
你的查询仅针对NameA、NameB、PartNumber三个字段,但部分产品的"Kanister"关键词可能存储在其他未被纳入查询的字段(比如产品描述、分类字段)中。当搜索"Kanister 20 Liter"时,operator: or的逻辑会匹配三个字段中包含Kanister 或 20 Liter的文档——那些字段里有"20 Liter"但没有"Kanister"的文档也会被命中,最终返回22条;而搜索"Kanister"时,只有三个字段里明确包含该词的10条文档被匹配。默认返回数量限制
Elasticsearch默认仅返回前10条按_score排序的结果。如果搜索"Kanister"时实际匹配的文档不止10条,但你没有显式设置size参数,就只会看到前10条。而搜索"Kanister 20 Liter"时,可能你在查询中设置了更大的size值(比如22),所以返回了所有匹配的文档。分词/词干处理不匹配
若你的字段使用了德语专用分析器(带词干提取功能),索引时"Kanister"可能被处理为词干形式(比如kanist),但查询时的"Kanister"用了标准分析器,未做词干转换,导致只有部分未被词干化的文档(比如字段为keyword类型的记录)能匹配,仅返回10条。而搜索"Kanister 20 Liter"时,"20 Liter"这类数字+普通词汇不受词干影响,能匹配更多文档。cross_fields类型的匹配逻辑
cross_fields类型的多字段查询会将多个字段视为一个整体,更适合匹配跨字段的短语(比如"NameA"存姓氏、"NameB"存名字时搜全名)。当仅搜索单个词时,它的评分逻辑会倾向于给多个字段都匹配到该词的文档更高分数,导致部分仅单个字段匹配的文档评分过低,若你隐含设置了min_score或者客户端默认过滤低评分结果,就只会返回前10条高分记录。
内容的提问来源于stack exchange,提问作者Stonki

