如何在Elasticsearch中匹配数组数据类型的多个值?

时间:2019-02-25 21:23:20

标签: elasticsearch

考虑以下数据集,我如何匹配同一字段的多个值?

{
  "description": "My first description.",
  "tags": ["A", "B", "C"]
},
{
  "description": "My second description.",
  "tags": ["A", "D", "E"]
}

在上面,我想创建一个查询,该查询与带有“ A” “ B”的“标签”的记录匹配。我目前正在使用与以下内容类似的内容:

query: {
  terms: {
    tags: ["A", "B"]
  }
}

但是,这将返回两条记录,因为它们与 any 的值匹配。是否有能力保持动态(传递值数组)并返回包含所有“标签”的结果?

1 个答案:

答案 0 :(得分:0)

从6.1版开始,您可以使用terms_set查询(请参阅documentation),该查询使您可以按以下方式编写查询:

{
  "query": {
    "terms_set": {
      "score": {
        "tags": ["A","B"],
        "minimum_should_match_script": {
          "source": "2"
        }
      }
    }
  }
}