OpenSearch post_filter无结果求助:添加后置过滤后无匹配结果
kNN查询后post_filter不生效的解决办法
你的问题核心是metadata是嵌套对象字段,而非字符串类型,直接对整个metadata字段做wildcard匹配,自然匹配不到任何结果。
正确的过滤写法分两种情况:
- 匹配metadata下的具体子字段(比如location)
如果只需要过滤metadata.location包含html的文档,直接指定子字段路径即可:
{ "size": 2, "query": { "knn": { "embedding": { "k": 3, "vector": [...] } } }, "post_filter": { "wildcard": { "metadata.location": "*html*" } } }
- 匹配metadata下任意子字段包含html
如果需要匹配metadata中任意字段包含html,且你的metadata字段映射为nested类型,需要用nested查询包裹过滤条件:
{ "size": 2, "query": { "knn": { "embedding": { "k": 3, "vector": [...] } } }, "post_filter": { "nested": { "path": "metadata", "query": { "wildcard": { "metadata.*": "*html*" } } } } }
额外说明:
先检查你的metadata字段映射:如果是普通object类型,用第一种写法即可;如果是nested类型,必须用第二种嵌套查询的方式。之前尝试的match、bool must无效,都是因为没有针对嵌套结构的正确字段路径编写查询条件。
内容的提问来源于stack exchange,提问作者Guig
相关产品推荐
相关产品推荐

