带过滤的Elasticsearch术语聚合

问题描述

我在foo索引中得到了这样的实体:

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

基本上我想知道是否有ID为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的单个搜索请求,但使用脚本或source_filtering进行后处理并在响应中搜索ID。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...