Хранимые поля в Elasticsearch - это поля, которые хранятся непосредственно в индексе. Эти поля не возвращаются по умолчанию при выполнении поискового запроса. Однако важно отметить, что поле _source, несмотря на то, что оно хранится по умолчанию, не индексируется и, следовательно, не может быть найдено. Хранимые поля, напротив, доступны для поиска, поскольку они проиндексированы.
Роль хранимых полей
Хранимые поля играют важную роль в Elasticsearch. Они используются для возврата исходных значений поля в ответе на поисковый запрос. Это особенно полезно, когда вы хотите получить исходное значение поля, а не только его проанализированные токены.
Например, если у вас есть документ с полем 'title', и вы хотите получить оригинальное название при поиске документов, вы можете использовать хранимое поле. Поле 'title' будет сохранено и возвращено в результатах поиска, что позволит вам увидеть оригинальное название каждого документа, соответствующего вашему запросу.
Настройка хранимых полей
По умолчанию поля не хранятся в Elasticsearch. Это означает, что если вы хотите использовать хранимые поля, вам необходимо явно установить параметр "store" в true в вашем мапинге (по умолчанию он равен false). Вот пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "mappings": { "properties": { "title": { "type": "text", "store": true }, "content": { "type": "text" } } } } |
В этом примере поле 'title' настроено на сохранение, в отличие от поля 'content', которое может содержать гораздо большее значение и поэтому не сохраняется. Это означает, что при выполнении поискового запроса вы можете получить исходное значение поля 'title' в результатах поиска без необходимости также получать большое значение содержимого.
Получение сохраненных полей
Чтобы получить сохраненные поля в результатах поиска, вы можете использовать параметр 'stored_fields' в поисковом запросе. Вот пример:
1 2 3 4 | { "query": { "match_all": {} }, "stored_fields": ["title"] } |
В этом примере поле 'title' указано в параметре 'stored_fields'. Это означает, что в результатах поиска будет возвращено исходное значение поля 'title', но не значение поля 'content'. Также стоит отметить, что значения хранимых полей всегда будут возвращаться в виде массивов.
Ограничения хранимых полей
Хотя хранимые поля полезны, они имеют некоторые ограничения. Одно из главных ограничений - увеличение размера индекса. Это происходит потому, что исходное значение поля хранится в дополнение к проанализированным маркерам. Это может привести к увеличению стоимости хранения и снижению производительности поиска.
Еще одно ограничение заключается в том, что хранимые поля не так гибки, как поле _source. Поле _source возвращает весь исходный документ, что позволяет получить любое поле в документе. Хранимые поля, с другой стороны, позволяют извлекать только те поля, которые вы явно задали для хранения.
Несмотря на эти ограничения, хранимые поля являются полезным инструментом в Elasticsearch. Они позволяют получить исходное значение поля в результатах поиска, что может быть невероятно полезным во многих сценариях. Однако, как и любой другой инструмент, их следует использовать разумно и с пониманием их компромиссов.