Комментарии 8
Спасибо! Как раз недавно начал смотреть ES для разнообразия.
У меня вопрос по terms aggregation. Когда я пробовал его использовать, он группировал документы не по значениям поля, а по словам в нем. Хотя, как мне кажется, чаще нужно именно первое. Где-то видел рекомендацию отключать анализ этого поля, но как тогда по нему искать… Как правильнее поступать в такой ситуации?
У меня вопрос по terms aggregation. Когда я пробовал его использовать, он группировал документы не по значениям поля, а по словам в нем. Хотя, как мне кажется, чаще нужно именно первое. Где-то видел рекомендацию отключать анализ этого поля, но как тогда по нему искать… Как правильнее поступать в такой ситуации?
0
Красивого решения одним параметром я не нашел. Как вариант если это что-то вроде категорий, то присваивать им ID и группировать по ID.
Если же это невозможно, а выключать аналайзер очень не хочется, то можно продублировать это поле, одно указать в маппинге без анализатора, а второе как нужно.
Всё таки стоит рассматривать ES больше как поиск, чем точная обработка и работа с данными. Как показывает практика, объединение даёт отличный результат на большом объеме данных, группирую документы максимально релевантно.
Если же это невозможно, а выключать аналайзер очень не хочется, то можно продублировать это поле, одно указать в маппинге без анализатора, а второе как нужно.
Всё таки стоит рассматривать ES больше как поиск, чем точная обработка и работа с данными. Как показывает практика, объединение даёт отличный результат на большом объеме данных, группирую документы максимально релевантно.
0
Да, видимо в этом случае действительно только по id группироваться. Получается сами значения нужно вытаскивать из другого источника данных и это нормальная практика для ES?
Просто странно, что нет простого способа сгруппироваться по самому значению, хотя в самом ES оно хранится. Видимо отсюда следует, что вместе с каждой группой нельзя вытащить дополнительные поля. (Что-то вроде select foo_id, foo_name from bar group by foo_id — группировка только по id, а вытаскиваем ещё и name)
Просто странно, что нет простого способа сгруппироваться по самому значению, хотя в самом ES оно хранится. Видимо отсюда следует, что вместе с каждой группой нельзя вытащить дополнительные поля. (Что-то вроде select foo_id, foo_name from bar group by foo_id — группировка только по id, а вытаскиваем ещё и name)
0
можно сделать вложенное поле, которое не будет анализироваться. При этом храниться будет только одна копия данных и задавать можно только внешнее поле
"text" : {
"type" : "string",
"analyzer" : "russian_morphology",
"fields" : {
"raw" : {
"type" : "string",
"index" : "not_analyzed"
}
}
}
+2
Хотелось бы в следующих статьях узнать поподробнее о связке elasticsearch — hadoop. В частности реально ли скрестить logstash/elasticsearch/kibana с hadoop для повышения скорости работы по аналитике логов.
+2
На заглавной картинке изображен крупный агрегатор в погоне за клиентами? ))
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
ElasticSearch — агрегация данных