Elasticsearch - 查询数组以匹配数组中的多个对象

时间:2018-04-13 21:35:39

标签: json elasticsearch kibana

我正在尝试编写一个查询,该查询将文档与作为对象数组的嵌套对象进行匹配。示例:

{"ListName" : "List 1", "Fruits": [ { "name" : "Apple"}, {"name": "Orange"}, {"name" : "banana"} ] }

我想写一个查询,我根据Fruits数组中的名称得到上面的文档,例如Apple和Orange。

我目前使用相同名称字段中的Apple和Orange匹配名称,而不是每个对象。

 {
  "query": {
    "nested": {
      "path": "Fruits",
      "query": {
        "bool": {
          "must": [
            {
              "term": {
                "Fruits.name": "Apple"
              }
            },
            {
              "match": {
                "Fruits.name": "Orange"
              }
            }
          ]
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:3)

您需要在nested查询中进行两个不同的bool/must查询,如下所示:

{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "Fruits",
            "query": {
              "term": {
                "Fruits.name": "Apple"
              }
            }
          }
        },
        {
          "nested": {
            "path": "Fruits",
            "query": {
              "match": {
                "Fruits.name": "Orange"
              }
            }
          }
        }
      ]
    }
  }
}