Найдите различные значения, а не отдельные значения в elasticsearch
Elasticsearch документация предполагает * что их кусок кода
* документация исправлена
GET /cars/transactions/_search?search_type=count
{
"aggs": {
"distinct_colors": {
"cardinality": {
"field": "color"
}
}
}
}
соответствует SQL-запросу
SELECT DISTINCT(color) FROM cars
но на самом деле это соответствует
SELECT COUNT(DISTINCT(color)) FROM cars
Я не хочу знать, сколько у меня разных значений, но каковы разные значения. Кто-нибудь знает, как этого добиться?
Ответы
Ответ 1
Используйте агрегирование терминов в поле color
. И вам нужно обратить внимание на то, как анализируется это поле, в котором вы хотите получить различные значения, то есть вам нужно убедиться, что вы не указали его при индексировании, иначе каждая запись в агрегации будет другим термином, который является частью содержимое поля.
Если вы все еще хотите токенизацию и использовать агрегацию terms
, вы можете посмотреть тип индексации not_analyzed
для этого поля и, возможно, использовать несколько полей.
Сводка терминов для автомобилей:
GET /cars/transactions/_search?search_type=count
{
"aggs": {
"distinct_colors": {
"terms": {
"field": "color",
"size": 1000
}
}
}
}
Ответ 2
Чтобы обновить отличный ответ от Андрея Стефана, нам нужно сказать, что параметр запроса search_type=count
больше не поддерживается в Elasticsearch 5. Новый способ сделать это - добавить "size" : 0
в тело, например:
GET /cars/transactions/_search
{
"size": 0,
"aggs": {
"distinct_colors": {
"terms": {
"field": "color",
"size": 1000
}
}
}
}
Ответ 3
Лично оба ответа были для меня загадочными и безнадежно сложными, когда я хотел добавить несколько фильтров.
Для меня было разумным перейти на вкладку "Обнаружение" и применить фильтры, которые я хотел. Затем я сохранил свой поиск.
Затем я создал новую визуализацию линейчатой диаграммы, используя свой сохраненный поиск. Затем я изменил ось X, чтобы использовать агрегирование терминов на основе моей области интересов (в моем случае, имена пользователей), а затем упорядочить по количеству. Убедитесь, что размер большой, например, 500.
Вы должны быть в состоянии получить результаты в табличной форме под вашей диаграммой. Простое и не сложное программирование JSON. Просто серия кликов. Вы даже можете сохранить визуализацию на потом.
Ответ 4
Я хранил тысячи телеграмм из десятков групп. Мне нужно иметь возможность вызывать запрос с Python, чтобы вернуть уникальное значение каждой группы.
Как мне это сделать?
Мой синтаксис JSON:
{
"_index": "indexname",
"_type": "items",
"_id": "726900857_-1001397432653",
"_version": 4,
"_score": null,
"_source": {
"chat": {
"id": -7383729824, <=== THIS IS THE VALUE I NEED TO RETURN
Как запросить каждое уникальное значение и вернуть его?
Спасибо