我正在尝试创建一个仅在满足多个条件时才匹配文档的查询/过滤器在同一个项目上一个数组的。
假设这是文档:
{
arr: [
{ "f1" : "a" , f2 : true },
{ "f1" : "b" , f2 : false}
]
}
我希望能够检索在同一元素上有 N 个条件匹配的文档。例如:arr.f1 == "a" AND arr.f2 == true
应该与文档匹配,但是arr.f1 == "b" AND arr.f2 == true
不应该。
我正在尝试嵌套布尔过滤器(除了这个过滤器之外我还有其他过滤器)但它不起作用,类似于
"bool" : {
"must": [
{ some other filter },
{"bool": {"must" : [
{"term" : {"arr.f1" : "a"}},
{"term" : {"arr.f2" : true}},
] }}
]
}
知道该怎么做吗?
谢谢
edit:
我更改了映射,现在嵌套查询按照 Val 的响应工作。我现在无法对嵌套字段执行“存在”过滤器:
一个简单的{ "filter" : {"exists" : { "field" : "arr" } } }
搜索未返回任何结果。我怎么做?
编辑:看起来我需要执行嵌套存在过滤器来检查嵌套对象内的字段是否存在。
就像是:
"filter" : {
"nested" : {"path" : "arr", "filter" : {"exists" : { "field" : "f1" } }}
}
编辑:
啊 - 现在突出显示不再起作用:
"highlight" : {
"fields" : [
{"arr.f1" : {}},
]
}
通过添加解决了这个问题include_in_parent : true
并查询嵌套字段和根对象。这太糟糕了。如果有人有更好的想法,我们非常欢迎!
{
"query" : {
"bool" : {
"must": [
{"term" : { "arr.f1" : "a" }},
{ "nested" : { "path" : "arr",
"query" : { "bool" : { "must" : [
{"term" : { "arr.f1" : "a" }},
{"term" : { "arr.f2" : true }}
] } }
}}
]
}
},
"highlight" : {
"fields" : [
{"arr.f1" : {}},
]
}
}
如果您想知道:这是遗留的东西。我现在无法重新索引(这将是显而易见的解决方案),我需要一个快速而肮脏的解决方法