elasticsearch 术语聚合与过滤

elasticsearch term aggregation with filtering

我在 foo 索引中有这样的实体:

{ids: ["aa", "bb"]}
{ids: ["aa", "cc"]}
{ids: ["ee"]}
{ids: ["ff" , "cc"]}

基本上我想知道是否有 ids aaee 的文档。 我试着用术语聚合来做到这一点

{
    "size": 0,
   "query": {
      "bool": {
        "should": [
             {
                  "terms": {
                    "ids": [
                      "aa", "ee"
                    ],
                    "boost": 1
                 }
              }
           ],
           "adjust_pure_negative": true,
           "boost": 1
         }
      },
  "aggregations": {
    "byid": {
      "terms": {
        "field": "ids",
        "min_doc_count": 1
      }
    }
  }
}

但是这里的问题是,作为响应,我也得到了与所选实体具有的其他 ids 的聚合,并且在实际情况中有很多,所以我对 ids 的聚合有兴趣无法回复,我会认为没有适合他们的项目(但实际上有,但由于字数限制而没有回复)

我可以为每个 id 单独做,没有 aggs 就得到一个 count,但是有很多,而且会非常昂贵。

根据聊天,发现没有不需要包含id的文档,因此不需要聚合,现在搜索结果中是否存在特定id是主要问题。

有几种方法:

  1. 使用multi_search with a single id in each sub-request
  2. 使用包含所有 ID 的单个搜索请求,但 post-processing 使用脚本或 source_filtering 并在响应中搜索 ID。