Elasticsearch:查找所有孩子拥有特定价值的财产的所有父母

时间:2018-10-18 10:16:04

标签: elasticsearch search

我有当前模式:

  • 具有属性parent和n个孩子date的对象child
  • 对象child包含单个属性foo

我想检索所有parent,其中 all child的属性foo等于0

我尝试了不同的方法,但是无论我做什么,都会检索某些parent,而其中一个childfoo处具有属性1

我的查询示例:

{
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "date": {
                            "lt": "2018-07-05T10:00:00.000Z"
                        }
                    }               
                },
                {
                    "nested": {
                        "path": "child",
                        "query": {
                            "bool": {
                                "must": {
                                    "term": {
                                        "child.foo": 0
                                    }       
                                }
                            }
                        }
                    }
                }
            ]
        }
    }
}

我尝试使用shouldmatchrange ...甚至must_not / should_not。我也尝试过过滤,但是没有运气,我一直在foo的{​​{1}}属性中获得成功。

我也尝试了聚合路径,但是我不知道如何将其应用于我的需求。

编辑:我查看了可能的重复项。虽然没有回答我的问题,但它使我走上了正确的道路。我的问题是我在考虑联接等问题的SQL方式。我本该以弹性的方式思考。

因此,我想做的事情无法完成。我需要寻找的是1,其中至少一个parent的{​​{1}}属性等于或大于1。然后,忽略这些结果并取其他结果。因此答案很简单:我只是添加了将嵌套查询的child更改为foo的过程,就是这样!

1 个答案:

答案 0 :(得分:0)

正如我在问题编辑中所解释的那样,一旦您开始以正确的方式思考,答案就相当容易。/

{
    "query": {
        "bool": {
            "must": [
                {
                    "range": {
                        "date": {
                            "lt": "2018-07-05T10:00:00.000Z"
                        }
                    }               
                },
                {
                    "nested": {
                        "path": "child",
                        "query": {
                            "bool": {
                                "must_not": {
                                    "term": {
                                        "child.foo": 0
                                    }       
                                }
                            }
                        }
                    }
                }
            ]
        }
    }
}

诀窍只是设置绝非