2017-02-08 10 views
0

Требование: Я хочу найти счетчик ID для определенного идентификатора категории. (например, для категорииID 2532, я хочу, чтобы число считалось равным 2, что означает, что оно назначено двум идентификаторам).Получить счетчик конкретного поля в документе, используя Elasticsearch

Я пытался с агрегациями, но с этим я могу получить только счетчик документов, а не счет поля.

Отображения

"List": { 
      "properties": { 

       "aId": { 
       "type": "long" 
       }, 
       "CategoryList": { 
       "properties": {     
        "categoryId": { 
        "type": "long" 
        }, 
        "categoryName": { 
        "type": "string" 
        } 
       } 
       }    
      } 
      } 

Образец документа:

"List": [ 
      { 
       "aId": 33074,   
       "CategoryList": [ 
       { 
        "categoryId": 2532, 
        "categoryName": "VODAFONE"     
       } 
       ] 
      }, 
     { 
       "aId": 12074,   
       "CategoryList": [ 
       { 
        "categoryId": 2532, 
        "categoryName": "VODAFONE"     
       } 
       ] 
      }, 

     { 
       "aId": 120755,   
       "CategoryList": [ 
       { 
        "categoryId": 1234, 
        "categoryName": "SMPLKE"     
       } 
       ] 
      } 
      ] 
+0

Вы пробовали [агрегацию cardinality' '] (https://www.elastic.co/ руководство/о/elasticsearch/ссылки/текущее/поиск-агрегирование-метрика-мощностная-aggregation.html)? – Val

+0

Я попробую и дам вам знать. – Seeker

+0

вы не можете получить желаемый результат, используя агрегацию мощности, пожалуйста, проверьте мой ответ – user3775217

ответ

0

с использованием агрегации кардинальности не поможет получать желаемые результаты. Агрегация кардинальности возвращает количество различных значений для поля, где вы хотите найти количество просмотров для количества раз для поля.

Вы можете использовать следующий запрос Здесь вы можете сначала отфильтровать документ CategoryList.categoryId, а затем запустить простую агрегацию терминов на этом поле

POST index_name1111/_search 
{ 
    "query": { 
     "bool": { 
      "must": [{ 
       "term": { 
        "CategoryList.categoryId": { 
         "value": 2532 
        } 
       } 
      }] 
     } 
    }, 
    "aggs": { 
     "count_is": { 
      "terms": { 
       "field": "CategoryList.categoryId", 
       "size": 10 
      } 
     } 
    } 
} 

Реакции выше запрос -

{ 
    "took": 3, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 2, 
    "max_score": 0, 
    "hits": [] 
    }, 
    "aggregations": { 
    "count_is": { 
     "doc_count_error_upper_bound": 0, 
     "sum_other_doc_count": 0, 
     "buckets": [ 
     { 
      "key": 2532, 
      "doc_count": 2 
     } 
     ] 
    } 
    } 
} 

Или вы также можете отбросить фильтр и запустить агрегацию только вернет вам все categoryId с их количеством появления.

POST index_name1111/_search 
{ 
size: 0, 
    "aggs": { 
    "count_is": { 
     "terms": { 
     "field": "CategoryList.categoryId", 
     "size": 10 
     } 
    } 
    } 
} 

Ответ выше запроса

{ 
     "took": 2, 
     "timed_out": false, 
     "_shards": { 
     "total": 5, 
     "successful": 5, 
     "failed": 0 
     }, 
     "hits": { 
     "total": 3, 
     "max_score": 0, 
     "hits": [] 
     }, 
     "aggregations": { 
     "count_is": { 
      "doc_count_error_upper_bound": 0, 
      "sum_other_doc_count": 0, 
      "buckets": [ 
      { 
       "key": 2532, 
       "doc_count": 2 
      }, 
      { 


     "key": 1234, 
      "doc_count": 1 
     } 
     ] 
    } 
    } 
} 

Используя агрегацию кардинальности вы получите следующий ответ со следующим запросом

POST index_name1111/_search 
{ 
    "size": 0, 
    "query": { 
     "bool": { 
      "must": [{ 
       "term": { 
        "CategoryList.categoryId": { 
         "value": 2532 
        } 
       } 
      }] 
     } 
    }, 
    "aggs": { 
     "id_count": { 
      "cardinality": { 
       "field": "CategoryList.categoryId" 
      } 
     } 
    } 
} 

Отклик выше запроса, который не делает дайте желаемый результат, так как два документа matc хед как с CategoryId как 252, так кол-отчетливого составляетом 1.

{ 
    "took": 4, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 2, 
    "max_score": 0, 
    "hits": [] 
    }, 
    "aggregations": { 
    "id_count": { 
     "value": 1 
    } 
    } 
} 

Надеется, что это помогает Спасибо