Соображения производительности ElasticSearch при сопоставлении строковых полей как текста и ключевого слова?

У меня есть вопрос относительно соображений компромиссов/производительности, которые следует учитывать при отображении строковых полей как text, так и keyword по сравнению с одним из них.

У меня есть вариант использования, когда было бы неплохо сопоставить около 25-30 строковых полей как текст, так и ключевое слово, но если бы были какие-то серьезные соображения производительности, я бы развернул и сопоставил каждое из них только с тем типом, который они будут искать наиболее как.

Я не смог найти много информации в Интернете об этом. Поэтому и спрашиваю здесь.

ElasticSearch версии 7.10 Спасибо!


person Ankit    schedule 25.11.2020    source источник


Ответы (2)


Сопоставления по умолчанию, предоставляемые ES, которые отображают поле как text, так и keyword, обычно делают это, потому что это удобно и позволяет использовать поле в разных контекстах без необходимости слишком много думать об этом. Это также хороший способ запуска новых проектов и не слишком беспокоиться об этом аспекте до конца проекта.

Однако, если вы действительно серьезно относитесь к своим сопоставлениям и производительности своего кластера, вы всегда должны как можно больше думать о том, почему вы сопоставляете поле определенным образом.

Есть несколько основных правил (но ваш пробег может всегда отличаться) в следующем (не исчерпывающем) списке:

  • Идентификаторы, коды, ключи и т. д., которые вы обычно используете при точном поиске, могут отображаться только как keyword (и/или wildcard в зависимости от ваших вариантов использования поиска).
  • Если у вас есть более длинные фрагменты текста, более близкие к естественному языку, и вы, возможно, захотите запустить полнотекстовый поиск, обычно рекомендуется отображать их как text.
  • Следствием предыдущего правила является то, что если вы знаете, что никогда не захотите выполнять полнотекстовый поиск по какому-либо полю, не сопоставляйте его как text, так как существуют значительные накладные расходы, связанные с индексирование текстовых полей в процессе анализа.
  • ...

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

person Val    schedule 25.11.2020

Производительность вашего поиска и индексации зависит от размера вашего строкового поля. Если у вас есть большая строка и вы сопоставляете ее как ключевое слово, это сильно повлияет на вашу индексацию и эффективность поиска. если вы решите сопоставить поле и как текст, и как ключевое слово, обязательно установите ignore_above в ключевом слове, потому что предел длины термина Lucene составляет 32766 байтов, что означает, что Elasticsearch не будет индексировать строки, превышающие этот размер, как ключевое слово.

Также влияет тип анализатора, который вы собираетесь использовать для своих строковых полей.

person Kaveh    schedule 25.11.2020