2016-03-22 4 views
0

У меня есть тип в elasticsearch, где каждый пользователь может размещать любое количество сообщений (поля являются «userid» и «post»). Теперь мне нужно количество пользователей, которые отправили 0 сообщений, 1 сообщение, 2 сообщения и т. Д .... как мне это сделать? Я думаю, что ему нужны некоторые вложенные агрегации, но я не знаю, как это сделать. Заранее спасибо !Вложенные счетные агрегирования в elasticsearch

+2

Просьба поделиться ссылкой на ваш индекс. 'GET/index/type/_mapping' – Richa

+1

Было бы полезно, если бы вы поделились своим картографированием и одним или двумя образцами документов. Также, какой у вас запрос. – Val

+0

{ "ESIndex": { "отображения": { "user_posts": { "свойства": { "пост": { "типа": "строка" }, "USERID": { "Тип": "длинный" } }} }} } –

ответ

0

Вы можете использовать script агрегации:

POST index_name/type_name/_search 
{ 
"aggs": { 
    "group By Post Count": { 
    "terms": { 
     "script" : "doc['post'].size()" 
     } 
    } 
    } 
} 

Убедитесь, что you enable scriptig

Надеется, что это помогает вам.

+0

нет извините, это не сработало! –

+0

Какая ошибка вы получаете ??? Или это ничего не возвращает? – Richa

+0

Он не возвращает никаких ошибок, но не возвращает ожидаемых результатов –

1

Лучший способ сделать это - добавить отдельное поле для хранения количества сообщений.

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

+0

Ok! Спасибо mbudnik –

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