ElasticSearch:嵌套查询:相同查询但结果不同

时间:2017-11-21 09:53:47

标签: elasticsearch

所以,我遇到了嵌套+过滤查询的问题。我正在触发相同的查询(除了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

1 个答案:

答案 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"
                        }
                    }]
                }
            }
        }
    }
}