Elasticsearch带权重搜索时Filter失效,返回空结果求助
解决Elasticsearch添加Filter后返回空结果的问题
刚接触ES踩这种坑太正常了,我帮你分析下问题所在:
你目前的代码里,把针对type.pr...的filter放在了nested查询内部的bool语句里——但nested查询的上下文是tags这个嵌套子文档,ES会尝试在每个tags对象里找type.pr...字段,这显然不是你想要的(毕竟type应该是根文档的属性吧?),所以这个filter永远匹配不到任何数据,自然返回空结果。
正确的写法应该是这样:
把根字段的filter移到外层的bool查询中,让nested查询只负责处理tags相关的匹配和打分,外层filter负责过滤根文档的属性:
{ "query": { "bool": { "must": [ { "nested": { "path": "tags", "score_mode": "sum", "query": { "function_score": { "query": { "match_phrase_prefix": { "tags.tag": "big" } } // 这里可以补充你之前的标签权重打分逻辑,比如script_score之类的 } } } } ], "filter": [ { "term": { "type.product": "你的目标值" } } // 替换成你完整的type字段路径和值 ] } } }
额外要检查的几个点:
- 确认
type.pr...的完整字段名拼写正确,比如是不是type.product?如果是对象字段,路径不能错。 - 如果
type对应的是keyword类型,term查询是精确匹配,要注意值的大小写是否和文档中的一致。 - 如果
type本身也是嵌套字段,那你需要再套一层nested查询来过滤,但这种情况比较少见,先优先排查根字段的情况。
内容的提问来源于stack exchange,提问作者aditya
相关产品推荐
相关产品推荐

