Почему «Эластик» разработал «магазинное» поле? - PullRequest
0 голосов
/ 18 февраля 2020

По умолчанию значения полей индексируются, чтобы сделать их доступными для поиска, но они не сохраняются. Это означает, что поле может быть запрошено, но исходное значение поля не может быть получено.

Мне интересно, как работает реализация на бэкэнде Elasticsearch. Как они могут сделать значение не извлекаемым, но доступным для поиска? (Я полагаю, что его нужно будет где-то хранить, чтобы вы могли правильно его найти?) Почему Elasticsearch разработан таким образом? какой эффективности он добился, спроектировав таким образом?

1 Ответ

1 голос
/ 18 февраля 2020

Исходный документ фактически «хранится» в поле _source (но не индексируется), и все поля исходных документов индексируются (но не сохраняются). Все значения поля обычно можно извлечь из поля _source, используя фильтрацию источника . Вот как ES настроен по умолчанию, но вы можете это изменить.

Например, вы можете вообще не хранить документ _source и хранить только определенные поля документа. Это может быть хорошей идеей, если, например, в вашем документе есть поле, которое содержит огромный текстовый блок. Возможно, было бы неразумно хранить _source, потому что это заняло бы много места впустую. Этот огромный фрагмент текста может быть полезен только для полнотекстового поиска, и поэтому его нужно будет только проиндексировать, в то время как все остальные поля, возможно, потребуется проиндексировать и сохранить, потому что они должны быть извлечены для отображения.

Итак, нижняя строка:

  • если поле можно искать, его не нужно сохранять, его нужно только проиндексировать
  • , если поле можно получить, его можно настроить на сохранение или получить / отфильтровать из поля _source (которое хранится по умолчанию)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...