Elasticsearch:聚合“现有”字段

时间:2014-10-31 13:29:52

标签: elasticsearch aggregation

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

我在这里做的是计算有多少文件没有name字段。

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

它有效,但我想做的恰恰相反。是否有existing聚合?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

你想使用" exists"过滤。

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
      }
    }
  }
}

}

注意:如果您只想计算您甚至不需要聚合的文档,只需使用" total"返回的点击次数。