Поле _source
Поле _source содержит исходный JSON-документ, который был передан при индексировании. Само поле _source не индексируется (и, следовательно, не может быть использовано для поиска), но оно сохраняется, чтобы его можно было возвращать при выполнении запросов fetch, таких как get или search.
Отключение поля _source
Хотя поле _source очень полезно, оно приводит к избыточным затратам на хранение в индексе. По этой причине его можно отключить следующим образом:
PUT my-index-000001
{
"mappings": {
"_source": {
"enabled": false
}
}
} Подумайте, прежде чем отключать поле _source
Пользователи часто отключают поле _source, не задумываясь о последствиях, и потом об этом жалеют. Если поле _source недоступно, то ряд функций не поддерживается:
- API
update,update_by_queryиreindex. - Динамическое выделение текста.
- Возможность повторной индексации из одного индекса Elasticsearch в другой, чтобы изменить отображения или анализ, или обновить индекс до новой основной версии.
- Возможность отладки запросов или агрегаций путём просмотра исходного документа, используемого при индексировании.
- Возможно в будущем, автоматическая возможность восстановления поврежденного индекса.
Если проблема в недостатке места на диске, то вместо отключения поля _source следует увеличить уровень сжатия.
Включение/исключение полей из _source
Экспертная функция – возможность обрезать содержимое поля _source после индексирования документа, но перед сохранением поля _source.
Удаление полей из поля _source имеет аналогичные недостатки, как и отключение _source, особенно то, что вы не сможете повторно индексировать документы из одного индекса Elasticsearch в другой. Вместо этого рассмотрите использование фильтрации _source.
Параметры includes/excludes (которые также принимают шаблоны) могут быть использованы следующим образом:
PUT logs
{
"mappings": {
"_source": {
"includes": [
"*.count",
"meta.*"
],
"excludes": [
"meta.description",
"meta.other.*"
]
}
}
}
PUT logs/_doc/1
{
"requests": {
"count": 10,
"foo": "bar"
},
"meta": {
"name": "Some metric",
"description": "Some metric description",
"other": {
"foo": "one",
"baz": "two"
}
}
}
GET logs/_search
{
"query": {
"match": {
"meta.other.foo": "one"
}
}
} | Эти поля будут удалены из хранящегося поля | |
| Мы по-прежнему можем искать по этим полям, даже если они не включены в хранящееся поле |
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/mapping-source-field.html