所以,我遇到了嵌套+过滤查询的问题。我正在触发相同的查询(除了json如何定位键,值对)和获得不同的结果(一个正确的响应和另一个抛出错误)。听起来很疯狂吧?好吧,我试了几次,交叉检查,它是真的。
成功查询:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": {
"nested": {
"filter": {
"bool": {
"must": {
"nested": {
"filter": {
"bool": {
"must": [{
"term": {
"stream.tagging.tag": "some_tag"
}
}]
}
},
"path": "stream.tagging"
}
}
}
},
"path": "stream"
}
}
},
"and": [{
"not": {
"term": {
"deleted": "true"
}
}
}, {
"term": {
"source": 11
}
}]
}
}
}
}
错误查询:
{
"query": {
"filtered": {
"filter": {
"and": [{
"not": {
"term": {
"deleted": "true"
}
}
}, {
"term": {
"source": 11
}
}],
"bool": {
"must": {
"nested": {
"filter": {
"bool": {
"must": {
"nested": {
"filter": {
"bool": {
"must": [{
"term": {
"stream.tagging.tag": "some_tag"
}
}]
}
},
"path": "stream.tagging"
}
}
}
},
"path": "stream"
}
}
}
}
}
}
}
错误讯息:
nested: QueryParsingException[[stream_rules_test] No filter registered for [must]]; }]","status":400
另请注意,当我单独触发它们时,只有嵌套且仅过滤查询,它也能正常工作。我希望我不会犯一些愚蠢的错误,但我几乎可以肯定我没有遗漏任何东西。
ES版本:1.5
答案 0 :(得分:0)
问题似乎是新版本的版本不支持“和:查询。以下查询一直有效。仍然混淆了为什么当密钥,值对更改时它不起作用。
{
"query": {
"filtered": {
"filter": {
"bool": {
"must_not": {
"term": {
"deleted": "true"
}
},
"must": [{
"term": {
"source": 11
}
},{
"nested": {
"filter": {
"bool": {
"must": {
"nested": {
"filter": {
"bool": {
"must": [{
"term": {
"stream.tagging.tag": "some_tag"
}
}]
}
},
"path": "stream.tagging"
}
}
}
},
"path": "stream"
}
}]
}
}
}
}
}