【问题标题】:Query documents that contains all values in nested array Elasticsearch查询包含嵌套数组 Elasticsearch 中所有值的文档
【发布时间】:2019-08-05 20:03:55
【问题描述】:

我正在尝试查询嵌套数组包含查询中传递的所有元素的文档。

索引存储组,每个组都有一个成员列表。我想查询包含给定成员的所有组。

映射:

"properties" : {
   "members" : {
      "type" : "nested",
      "properties" : {
         "name" : {
            "type" : "keyword"
         }
       }
    },
    "name" : {
        "type" : "text"
     }
   }
  }
}

示例内容:

[
  {
    "name" : "group 1",
    "members" : [
      {
        "name" : "alice"
      },
      {
        "name" : "bob"
      }
    ]
  },
  {
    "name" : "group 2",
    "members" : [
      {
        "name" : "alice"
      },
      {
        "name" : "foo"
      },
      {
        "name" : "bob"
      }
    ]
  },
  {
    "name" : "group 3",
    "members" : [
      {
        "name" : "foo"
      },
      {
        "name" : "bar"
      }
    ]
  }
]

如何找到所有同时拥有“alice”和“foo”成员的群组?

我尝试了以下查询,但它什么也没返回:

GET /group/_search
{
  "query": {
    "nested": {
      "path": "members",
      "query": {
        "bool": {
          "must": [
            {"match": {"members.name": "alice"}},
            {"match": {"members.name": "foo"}}
          ]
        }
      }
    }
  }
}

我也尝试过使用term 而不是match,但没有结果。

【问题讨论】:

    标签: elasticsearch elasticsearch-6 elasticsearch-query


    【解决方案1】:

    您可以在 must 子句中使用嵌套。像这样:

    GET /group/_search
    {
     "query": {
       "bool": {
         "must": [
           {
             "nested": {
               "path": "members",
               "query": {
                 "term": {
                   "members.name": {
                     "value": "alice"
                   }
                 }
               }
             }
           },
           {
             "nested": {
               "path": "members",
               "query": {
                 "term": {
                   "members.name": {
                     "value": "foo"
                   }
                 }
               }
             }
           }
         ]
       }
     }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-03
      • 2021-11-12
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      相关资源
      最近更新 更多