【发布时间】:2019-01-04 01:19:18
【问题描述】:
我们有一个多租户索引,并且只需要针对单个租户的索引执行查询。基本上,对于所有匹配过滤器的文档,返回任何匹配以下查询的文档,但不包括只匹配过滤器的文档。
例如,假设我们有一个文档列表,如下所示:
{ _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。
【问题讨论】:
标签: elasticsearch elasticsearch-6