我们有一个多租户索引,只需要针对单个租户对索引执行查询。基本上,对于所有与过滤器匹配的文档,请返回与以下查询匹配的所有文档,但不包括仅与过滤器匹配的文档。
例如,假设我们有一个文档文档列表,如下所示:
{ _id: 1, account_id: 1, name: "Foo" }
{ _id: 2, account_id: 2, name: "Bar" }
{ _id: 3, account_id: 2, name: "Foo" }
我认为此查询可以工作,但不能:
{
"bool": {
"filter": { "term": { "account_id": 2 } },
"should": [
{ "match": { "name": "Foo" }
]
}
}
它返回与account_id: 2
匹配的两个文档:
{ _id: 3, account_id: 2, name: "Foo", score: 1.111 }
{ _id: 2, account_id: 2, name: "Bar", score: 0.0 }
我真正想要的只是返回文档_id: 3
,这基本上是“在account_id等于2的所有文档中,仅返回名称与Foo匹配的文档”。
如何使用ES 6.2完成此操作?需要注意的是should
和must
的匹配条件的数目并不总是已知的,我真的想避免使用minimum_should_match
。
答案 0 :(得分:1)
改为尝试:只需将should
替换为must
:
{
"bool": {
"filter": { "term": { "account_id": 2 } },
"must": [
{ "match": { "name": "Foo" }
]
}
}