Начиная с версии 7.14 в Elasticsearch появился новый тип поля
match_only_text, который может быть использован в качестве замены поля типа text. Тип поля match_only_text обладает следующими характеристиками:⚡️Оценка релевантности рассчитывается как количество совпадающих выражений.
⚡️Span-запросы не поддерживаются. Все остальные типы запросов, которые поддерживаются для полей типа text, также поддерживаются для полей match_only_text.
⚡️Фразовые и интервальные запросы выполняются медленнее, чем в текстовых полях, но намного быстрее, чем линейное сканирование. Другие типы запросов выполняются так же быстро.
Так за счет чего достигается оптимизация хранения?
match_only_text — это тип поля, который отсекает некоторые характерные типу text вещи:⚡️коэффициенты нормализации длины
⚡️частотности выражений
⚡️позиции в выдаче
Коэффициент нормализации длины и частотности выражений используются только для вычисления скоринга, поэтому отказ от их использования очевидный шаг, учитывая, что оценка релевантности обычно бесполезна для логов, т.к. события обычно сортируются по убыванию временной метки, а не по релевантности.
P.S. Про 10% Elastic заявляет в своей статье блога. Для оптимизации хранения мы рекомендуем использовать поля типа
keyword и удалять поле message после того как вы вытащили оттуда всё необходимое. В целом, match_only_text выглядит как некий компромисс, который вроде бы и не особо нужен при работе с текстовыми логами.Приходилось ли вам использовать поле типа
match_only_text в ваших индексах?