elasticsearch仅与筛选器匹配

cwxwcias  于 2021-06-15  发布在  ElasticSearch
关注(0)|答案(1)|浏览(471)

我们有一个多租户索引,只需要对单个租户的索引执行查询。基本上,对于与筛选器匹配的所有文档,返回与以下查询匹配的所有文档,但不包括仅与筛选器匹配的文档。
例如,假设我们有这样一个文档列表:

{ _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 ,这基本上是“在帐户id等于2的所有文档中,只返回名称与foo匹配的文档”。
如何使用es 6.2实现这一点?需要注意的是 should 以及 must 比赛条件并不总是已知的,我真的想避免使用 minimum_should_match .

9lowa7mx

9lowa7mx1#

试试这个:简单地替换 shouldmust :

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

相关问题