簡體   English   中英

查詢包含嵌套數組 Elasticsearch 中所有值的文檔

[英]Query documents that contains all values in nested array Elasticsearch

我正在嘗試查詢嵌套數組包含查詢中傳遞的所有元素的文檔。

索引存儲組,每個組都有一個成員列表。 我想查詢包含給定成員的所有組。

映射:

"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但它沒有給出任何結果。

您可以在 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"
               }
             }
           }
         }
       }
     ]
   }
 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM