Elasticsearch : aggregation "existing" fields
我对 ElasticSearch 聚合还很陌生。我希望能够计算使用非空字段检索到的文档数量。
这是我计算有多少文档没有
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | { "size": 3, "query": { "query_string": { "query":"martin" } }, "aggs": { "results_without_mb_id": { "missing": { "field":"name" } } } } |
它有效,但我想做完全相反的事情。是否有
和上面一样,只需将\\'missing\\'替换为\\'exists\\',并添加\\'filter\\'键,所以:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | {"size": 3, "query": { "query_string": { "query" :"martin" } }, "aggs": { "results_without_mb_id": { "filter": { "exists": { "field":"name" } } } } |
您想使用"存在"过滤器。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-exists-filter.html
这是一个示例,它找到所有存在 authResult.codeID 的文档,然后对其进行聚合。:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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 } } } } |
}
注意:如果您只想计算甚至不需要聚合的文档,只需使用返回的"总"命中数即可。