Elasticsearch:聚合”现有”字段

Elasticsearch : aggregation "existing" fields

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

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

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

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


和上面一样,只需将\\'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
      }
    }
  }
}

}

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