2014-02-14 7 views
6

Я хочу подсчитать различные значения поля из моего набора данных. Например:Уникальное количество агрегированных терминов

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

Вот мой запрос:

POST appzz/messages/_search 
{ 
    "aggs": { 
     "words": { 
     "terms": { 
      "field": "username" 
     } 
     } 
    }, 
    "size": 0, 
    "from": 0 
} 

Есть ли unique вариант или что-то подобное?

+0

Так в чем же тут вердикт? Похоже, предложение @ Jeffrey'jf'Lim должно быть правильным (по крайней мере, это моя интуиция). С другой стороны, «мощность» кажется экспериментальной, и, следовательно, нельзя доверять :) – Dror

ответ

2

Мы провели долгую дискуссию об этом с одним из парней ES в недавнем собрании Elasticsearch, которое у нас было здесь. Короткий ответ - нет, нет. И, по его словам, скоро этого не ожидается.

Один из вариантов заключается в том, чтобы получить все условия (дать действительно большой размер) и подсчитать, сколько терминов будет возвращено, но это дорого и не очень важно, если у вас много уникальных терминов.

+0

Спасибо за информацию. –

0

Я до сих пор довольно знаком с ES, но если я получу вас правильно, кажется, что вы сможете получить ответ, просто подсчитав количество ведер, возвращенных в ответ? (См http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-terms-aggregation.html)

Примечание, хотя: вопреки к тому, что документ говорит сейчас с размером 0 («Можно не ограничивать число членов, которые возвращаются, установив размер 0.») , мое тестирование с последней версией (1.0.1 сейчас) показывает, что это не работает! Наоборот,, установочный размер до 0 даст вам 0 ведра !!! Вы должны установить (вздох) размер до некоторой произвольной высокой фигуры, а теперь, если вы хотите получить все условия.

EDIT: кричит, мне плохо! Я просто перечитал документ еще раз и только заметил, что там есть версия, и понял, что это только выходит в 1.1.0? Эта заметка находится в прошедшем времени («Добавлено в 1.1.0.»), Что сбивает с толку, но я думаю, что 1.1.0 еще не выпущен.

О, и, кстати, похоже, что-то не так с вашим URL-адресом? Надеюсь, ты это знаешь.

7

Вы ищете cardinality aggregation, который был добавлен в Elasticsearch 1.1. Он позволяет запросить что-то вроде этого:

{ 
    "aggs" : { 
     "unique_users" : { 
      "cardinality" : { 
       "field" : "username" 
      } 
     } 
    } 
} 
+0

Как я могу использовать мощность в URL? – satheesh

1

@DerMiggel: Я попытался использовать мощность для своего проекта. Удивительно в моей локальной системе из общей дампы около 2,00,000 документов, я пробовал мощность с точностью_порогом 100, 0 и 40 000 (как максимальное значение). Первые два раза результат был другим (счет 175 и 184 соответственно) и 40 000 исключений из памяти. Кроме того, время вычисления было огромным по сравнению с другими aggs. Следовательно, я чувствую, что мощность на самом деле не правильна и может привести к краху вашей системы, когда требуется высокая точность и точность.

Смежные вопросы