【问题标题】:Elasticsearch : aggregation "existing" fieldsElasticsearch:聚合“现有”字段
【发布时间】:2022-04-19 16:06:32
【问题描述】:

我对 ElasticSearch 聚合还很陌生。我希望能够用非空字段计算检索到多少文档。

这是我计算有多少文档没有name 字段的方法。

{
  "size": 3,
  "query": {
    "query_string": {
      "query": "martin"
    }
  },
  "aggs": {
    "results_without_mb_id": {
      "missing": {
        "field": "name"
      }
    }
  }
}

它有效,但我想做完全相反的事情。有existing 聚合吗?

【问题讨论】:

    标签: elasticsearch aggregation


    【解决方案1】:

    通过将“存在”过滤器传递给filter aggregation 来执行此操作。和上面一样,只需将 'missing' 替换为 'exists',并添加 'filter' 键,这样:

    { "size": 3, 
      "query": {
        "query_string": {
          "query" : "martin"
        } 
      }, 
      "aggs": {
        "results_without_mb_id": { 
           "filter": { 
              "exists": { 
                "field": "name" 
              }  
           } 
        } 
    }
    

    【讨论】:

      【解决方案2】:

      您想使用“存在”过滤器。

      http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-exists-filter.html

      这是一个示例,它查找所有存在 authResult.codeID 的文档,然后对其进行聚合。:

      GET prodstarbucks/authEvent/_search
      {
        "size": 0,
        "query": {
          "filtered": {
            "query": {
              "match_all": {}
            },
            "filter": {
              "exists": {
                "field": "authResult.codeID"
              }
            }
          }
        },
        "aggs": {
          "users": {
            "terms": {
              "field": "authInput.userName.userNameNotAnalyzed",
              "size": 5
            }
          }
        }
      }
      

      }

      注意:如果您只想计算甚至不需要聚合的文档,只需使用返回的“总”命中数。

      【讨论】:

      • 实际上我不想更改我的查询。我只想计算具有非空“名称”(和“年龄”,以及...)的文档数量。
      • "exists" (aka not null) 仅作为过滤器选项有效,您不能将其放在查询节点中。您可以将过滤器和查询组合在一起,就像我在上面的示例中所做的那样。因此,您将在存在过滤器中有“名称”,而在查询部分中有您的 query_string 内容。
      猜你喜欢
      • 2020-02-18
      • 2016-11-23
      • 2015-07-30
      • 2014-08-24
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      相关资源
      最近更新 更多