一尘不染

elasticsearch:匹配其数组包含此字段的文档

elasticsearch

我有一个与此类似的文件:

{
name: "bob",
contains: ["a", "b", "c"]
},
{
name: "mary",
contains: ["a", "b"]
},
{
name: "Jason",
contains: ["b"]
}

我要查询以查找所有包含“ a”的人(鲍勃和玛丽)。如何编写查询?

编辑:

当前查询:

                query: {
                bool: {
                    must: [
                        { match: { exists: "yes" }},
                        { term: {contains: "a"}}
                    ],
                    must_not: [
                        { match: { status: "removed"}}
                    ]

                }
            }

阅读 803

收藏
2020-06-22

共1个答案

一尘不染

contains字段上使用术语过滤器/查询(例如){term: {contains: "a"}}可以满足您的需求。假设您只想匹配满足该条件的任何文档,则完整查询将类似于:

{
  "query": {
    "filtered": {
      "filter": {
        "term": {
          "contains": "a"
        }
      }
    }
  }
}

之所以可行,是因为值数组是分别索引的,并且如果查询的字段是列表,则术语查询将查找包含包含该值的数组的文档。

2020-06-22