在Elasticsearch中搜索包含某些嵌套对象的文档

时间:2018-02-18 14:05:37

标签: elasticsearch search full-text-search elasticsearch-5

我在Elasticsearch索引中的文档具有以下格式:

{
    timestamp: "123456789",
    tags: [
        { key:"tag1", "value": "val1" }, ...
    ]
}

我希望在{ key:"tag1" }字段中获取包含{ key:"tag2", "value": "val2" }tags的所有文档。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您可以尝试使用bool查询,在其中指定必填部分中需要的嵌套查询数量:

GET test_nested/test/_search
{
  "query": {
    "bool": {
      "must": [
        {"nested" : {
            "path" : "tags",
            "query" : {
                "bool" : {
                    "must" : [
                    { "match" : {"tags.key" : "tag1"} }
                    ]
                }
            }
        }},
        {"nested" : {
            "path" : "tags",
            "query" : {
                "bool" : {
                    "must" : [
                    { "match" : {"tags.key" : "tag2"} },
                    { "match" : {"tags.value" : "val2"} }
                    ]
                }
            }
        }}
      ]
    }
  }
}

在这种情况下,我有一个嵌套查询用于选择所有带有键“tag1”的文档,第二个嵌套查询用于选择所有带有“tag2”和“value2”的文档。