Elasticsearch:聚合"现有"字段

lit*_*til 4 aggregation elasticsearch

我对ElasticSearch聚合很新.我希望能够计算使用非空字段检索的文档数.

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

{
  "size": 3,
  "query": {
    "query_string": {
      "query": "martin"
    }
  },
  "aggs": {
    "results_without_mb_id": {
      "missing": {
        "field": "name"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

它有效,但我想做的恰恰相反.有existing汇总吗?

ema*_*axi 8

如上所述,只需将'missing'替换为'exists',并添加'filter'键,这样:

{ "size": 3, 
  "query": {
    "query_string": {
      "query" : "martin"
    } 
  }, 
  "aggs": {
    "results_without_mb_id": { 
       "filter": { 
          "exists": { 
            "field": "name" 
          }  
       } 
    } 
}
Run Code Online (Sandbox Code Playgroud)


jhi*_*den 3

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

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
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

}

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