嵌套的Elasticsearch查询

问题描述 投票:0回答:1

我正在尝试创建一个嵌套查询,该查询会过滤掉一些具有特定术语的文档。在这种情况下,我正在尝试过滤掉user.first中具有匹配术语的文档。数据示例:

{
  "group" : "fans",
  "user" : [ 
    {
      "first" : "John",
      "last" :  "Smith"
    },
    {
      "first" : "Tim",
      "last" :  "White"
    }
  ]
},
{
  "group" : "fans",
  "user" : [ 
    {
      "first" : "Jim",
      "last" :  "Smith"
    },
    {
      "first" : "Alice",
      "last" :  "Black"
    }
  ]
}

我的查询没有得到所需的结果,因为它返回所有未过滤的记录。我尝试使用以下方式查询:

"query": {
    "bool": {
        "must_not": [
            {
                "nested": {
                    "query": {
                        "terms": {
                            "user.first": [
                                "John",
                                "Thomas"
                            ]
                        }
                    },
                    "path": "user"
                }
            }
        ]
    }
}

我希望在这里获得与过滤器不匹配的文档。在这种情况下,它应该只返回第二个文档。这样做的正确方法是什么?

elasticsearch elasticsearch-5
1个回答
0
投票

经过大量的反复试验后,我找到了解决问题的方法。这是筛选出我们不需要的文档的查询。

"query": {
    "bool": {
        "must_not": [
            {
                "bool": {
                    "filter": [
                        {
                            "nested": {
                                "query": {
                                    "terms": {
                                        "user.first": [
                                            "John",
                                            "Thomas"
                                        ]
                                    }
                                },
                                "path": "user"
                            }
                        }
                    ]
                }
            }
        ]
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.