Elasticsearch 数组相交查询

Elasticsearch Array Intersect Query

我正在尝试根据数组字段是否至少具有 来自另一组的一个元素。

我有一个包含字符串数组的字段,例如:

_source: {
...
keywords: [
"Data Science",
"Chemistry",
"Biology",
"Computer Science",
"Economics"
]
}

我想过滤结果,使关键字至少包含以下一项 值列表,例如:

> ["History","Biology"] # would return the above document
> ["History","Geography"] # would not

它包含多少并不重要,重要的是它匹配 至少其中之一。

我尝试了条款查询,但没有给我任何结果

默认情况下 terms query 是 OR-query,因此以下将匹配

{
  "query": {
    "terms": {
      "keywords": [
        "Chemistry",
        "Geography"
      ]
    }
  }
}

如果你的条件such that keywords contain at least one是要满足的。


现在,如果要求是使用 AND 查询(如果再有一个 not 匹配,return null),您可以使用 bool-must查询

{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "keywords": {
              "value": "Chemistry"
            }
          }
        },
        {
          "term": {
            "keywords": {
              "value": "Geography"
            }
          }
        }
      ]
    }
  }
}

您可能需要将 .keyword 附加到相关字段。