2014-10-31 3 views
3

Я довольно новичок в агрегатах ElasticSearch. Я хочу иметь возможность подсчитать, сколько документов извлекается с непустым полем.Elasticsearch: агрегированные «существующие» поля

Вот что я делаю, чтобы подсчитать, сколько документов не содержит поля name.

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

Это работает, но я хочу сделать прямо противоположное. Есть ли агрегация existing?

ответ

0

Вы хотите использовать фильтр «существует».

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

}

Примечание: Если вы только хотите подсчитать документы, которые вам даже не нужны, просто используйте общее количество обращений.

+0

на самом деле я не хочу, чтобы изменить свой запрос. Я просто хочу подсчитать количество документов с нулевым «именем» (и «age» и ...). – litil

+0

"exists" (aka not null) действителен только как параметр фильтра, вы не можете поместить его в свой узел запроса. Вы можете комбинировать фильтры и запросы вместе, как и в моем примере выше. Таким образом, у вас будет «Имя» в существующем фильтре и материал query_string в части запроса. – jhilden

4

Как выше, просто замените «пропущенный» с «существует», а также добавить ключ «фильтр», так:

{ "size": 3, 
    "query": { 
    "query_string": { 
     "query" : "martin" 
    } 
    }, 
    "aggs": { 
    "results_without_mb_id": { 
     "filter": { 
      "exists": { 
      "field": "name" 
      } 
     } 
    } 
} 
Смежные вопросы