Elasticsearch嵌套对象使用AND条件进行搜索

时间:2018-08-04 14:10:46

标签: elasticsearch

这是我在Elasticsearch中的数据-我将标签保留为嵌套对象

PUT myblog/3
{
  "id" : 10003,
  "tags" : [ 
    {
      "tag" : 45647
    },
    {
    "tag" : 45648
    }
  ]
}


PUT myblog/4
{
  "id" : 10004,
  "tags" : [ 
    {
      "tag" : 45647
    }
  ]
}

PUT myblog/5
{
  "id" : 10005,
  "tags" : [ 
    {
    "tag" : 45648
    }
  ]
}

我要检索标记为45647和45648的文档。我以这种方式尝试过

GET myblog/_search
{

  "query": {
    "nested": {
      "path": "tags",
      "query": {
        "bool": {
          "must": [
            { "match": { "tags.tag": 45648}}, 
            { "match": { "tags.tag": 45647}}
          ]
        }
      }
    }
  }
}

但是它没有返回预期的结果。查询中缺少什么以获得预期结果?

1 个答案:

答案 0 :(得分:1)

您快到了。您需要两个nested子句,因为每个嵌套元素在下面都是一个不同的文档。尝试这样:

GET myblog/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "tags",
            "query": {
              "match": {
                "tags.tag": 45648
              }
            }
          }
        },
        {
          "nested": {
            "path": "tags",
            "query": {
              "match": {
                "tags.tag": 45647
              }
            }
          }
        }
      ]
    }
  }
}