Elasticsearch仅与过滤器匹配

时间:2019-01-03 16:55:58

标签: elasticsearch elasticsearch-6

我们有一个多租户索引,只需要针对单个租户对索引执行查询。基本上,对于所有与过滤器匹配的文档,请返回与以下查询匹配的所有文档,但不包括仅与过滤器匹配的文档。

例如,假设我们有一个文档文档列表,如下所示:

{ _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完成此操作?需要注意的是shouldmust的匹配条件的数目并不总是已知的,我真的想避免使用minimum_should_match

1 个答案:

答案 0 :(得分:1)

改为尝试:只需将should替换为must

{
  "bool": {
    "filter": { "term": { "account_id": 2 } },
    "must": [
      { "match": { "name": "Foo" }
    ]
  }
}