elasticsearch数组相交查询

p5fdfcr1  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(503)

我尝试根据数组字段是否至少包含另一个集合中的一个元素来筛选结果。
我有一个包含字符串数组的字段,例如:

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

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

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

它包含多少并不重要,只是它至少匹配其中一个。
我尝试了术语查询,但没有给我任何结果

olqngx59

olqngx591#

默认情况下,terms查询是or查询,因此以下内容将匹配

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

如果你的情况 such that keywords contain at least one 就是要满足。
现在,如果要求使用and查询(如果还有一个不匹配,则返回null),则可以使用bool must查询

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

根据您可能需要附加的Map .keyword 到相关领域。

相关问题