我有一个与此类似的文件:
{ 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"}} ] } }
在contains字段上使用术语过滤器/查询(例如){term: {contains: "a"}}可以满足您的需求。假设您只想匹配满足该条件的任何文档,则完整查询将类似于:
contains
{term: {contains: "a"}}
{ "query": { "filtered": { "filter": { "term": { "contains": "a" } } } } }
之所以可行,是因为值数组是分别索引的,并且如果查询的字段是列表,则术语查询将查找包含包含该值的数组的文档。