Сообщения

Сегментное агрегирование в Elasticsearch: агрегирование матрицы смежности

Изображение
Это агрегация сегментов (bucket aggregation), возвращающая форму матрицы смежности. Запрос предоставляет набор именованных выражений фильтра, аналогичный запросу агрегирования фильтров. Каждый сегмент в ответе представляет собой непустую ячейку в матрице пересекающихся фильтров. Учитывая фильтры с именами A, B и C, ответ вернет сегменты со следующими именами: Пересекающиеся сегменты, например A&C, помечаются с использованием комбинации двух имен фильтров с разделителем по умолчанию &. Обратите внимание, что ответ также не включает сегмент C&A, поскольку это будет тот же набор документов, что и A&C. Матрица называется симметричной, поэтому мы возвращаем только ее половину. Для этого мы сортируем строки имен фильтров и всегда используем наименьшее значение в паре в качестве значения слева от разделителя. Пример В следующей агрегации взаимодействий используется adjacency_matrix, чтобы определить, какие группы людей обменивались электронными письмами. PUT emails/_b...

Агрегации в Elasticsearch: сегментное агрегирование

Изображение
Агрегаты сегментов (bucket aggregations) не вычисляют метрики по полям, как агрегаты метрик, а вместо этого создают сегменты документов. Каждый сегмент связан с критерием (в зависимости от типа агрегирования), который определяет, "попадает" ли в него документ в текущем контексте. Другими словами, сегменты эффективно определяют наборы документов. Помимо самих сегментов агрегаты сегментов также вычисляют и возвращают количество документов, которые "попали" в каждый сегмент. Агрегаты сегментов, в отличие от агрегатов метрик, могут содержать субагрегации. Эти субагрегации будут объединены для сегментов, созданных их "родительской" агрегацией сегментов. Существуют разные агрегаторы сегментов, у каждого из которых своя стратегия "сегментирования". Некоторые определяют один сегмент, некоторые определяют фиксированное количество нескольких сегментов, а третьи динамически создают сегменты в процессе агрегации. Максимальное количество сегментов, разреше...

Агрегации в Elasticsearch

Изображение
Агрегирование суммирует ваши данные в виде показателей, статистики или другой аналитики. Агрегации помогут вам ответить на такие вопросы, как: Каково среднее время загрузки моего веб-сайта? Кто мои самые ценные клиенты с учетом объема транзакций? Что будет считаться большим файлом в моей сети? Сколько товаров находится в каждой товарной категории? Elasticsearch разбивает агрегаты на три категории: Агрегаты показателей, которые вычисляют показатели, такие как сумма или среднее значение, на основе значений полей. Агрегаты сегментов, которые группируют документы в сегменты (buckets), также называемые ячейками (bins), на основе значений полей, диапазонов или других критериев. Конвейерные агрегаты, которые принимают входные данные из других агрегатов вместо документов или полей. Запустить агрегацию Вы можете запускать агрегаты как часть поиска, указав параметр aggs API поиска. Следующий поиск запускает агрегацию терминов в my-field: GET /my-index-000001/_search { "a...

Запросы на уровне термина в Elasticsearch: запрос набора терминов (terms_set)

Изображение
Возвращает документы, содержащие минимальное количество точных терминов в указанном поле. Запрос terms_set аналогичен запросу terms, за исключением того, что вы можете определить количество совпадающих терминов, необходимых для возврата документа. Например: Поле programming_languages содержит список известных языков программирования, таких как c++, java или php для кандидатов на работу. Вы можете использовать запрос terms_set для возврата документов, которые соответствуют как минимум двум из этих языков. Поле permissions содержит список возможных разрешений пользователя для приложения. Вы можете использовать запрос terms_set для возврата документов, которые соответствуют подмножеству этих разрешений. Пример запроса Настройка индекса В большинстве случаев вам нужно будет включить отображение числового поля в свой индекс, чтобы использовать запрос terms_set. Это числовое поле содержит количество совпадающих терминов, необходимых для возврата документа. Чтобы узнать, как настроит...

Запросы на уровне термина в Elasticsearch: terms запрос

Изображение
Возвращает документы, содержащие один или несколько точных терминов в указанном поле. Запрос terms такой же, как term запрос, за исключением того, что вы можете искать несколько значений. Пример запроса Следующий поиск возвращает документы, в которых поле user.id содержит kimchy или elkbee. GET /_search { "query": { "terms": { "user.id": [ "kimchy", "elkbee" ], "boost": 1.0 } } } Параметры верхнего уровня для terms запроса field (Обязательный, объект) Поле для поиска. Значение этого параметра представляет собой массив терминов, которые вы хотите найти в указанном поле. Чтобы вернуть документ, один или несколько терминов должны точно соответствовать значению поля, включая пробелы и заглавные буквы. По умолчанию Elasticsearch ограничивает количество запросов до 65536 терминов. Вы можете изменить это ограничение с помощью параметра index.max_terms_count. Чтобы использовать значения полей сущ...

Запросы на уровне термина в Elasticsearch: term запрос

Изображение
Возвращает документы, содержащие точный термин в указанном поле. Вы можете использовать term запрос для поиска документов на основе точного значения, такого как цена, идентификатор продукта или имя пользователя. Избегайте использования term запроса для текстовых полей. По умолчанию Elasticsearch изменяет значения текстовых полей как часть анализа. Это может затруднить поиск точных совпадений для значений текстовых полей. Для поиска значений текстового поля используйте вместо этого match запрос. Пример запроса GET /_search { "query": { "term": { "user.id": { "value": "cat", "boost": 1.0 } } } } Параметры верхнего уровня для term запроса field (Обязательный, объект) Поле для поиска. Параметры для field value (Обязательный, строка) Термин, который вы хотите найти в указанном поле field. Чтобы вернуть документ, термин должен точно соответствовать значению поля, включая пробе...

Запросы на уровне термина в Elasticsearch: fuzzy запрос

Изображение
Возвращает документы, содержащие термины, похожие на поисковый запрос, измеряемый расстоянием редактирования Левенштейна. Расстояние редактирования - это количество изменений одного символа, необходимых для преобразования одного термина в другой. Эти изменения могут включать: Смена символа (box → fox) Удаление символа (black → lack) Вставка символа (sic → sick) Перемещение двух соседних символов (act → cat) Чтобы найти похожие термины, fuzzy запрос создает набор всех возможных вариантов или расширений поискового термина в пределах указанного расстояния редактирования. Затем запрос возвращает точные совпадения для каждого раскрытия. Примеры запросов Простой запрос GET /_search { "query": { "fuzzy": { "user.id": { "value": "act" } } } } Пример использования дополнительных параметров GET /_search { "query": { "fuzzy": { "user.id": { ...