Настройка для использования дискового пространства
Отключите ненужные функции
По умолчанию Elasticsearch индексирует и добавляет значения документов для большинства полей, чтобы они могли быть проиндексированы и агрегированы «из коробки». Например, если у вас есть числовое поле под названием foo, на котором необходимо выполнить гистограммы, но которое никогда не нужно фильтровать, вы можете безопасно отключить индексацию этого поля в своих отображениях:
PUT index
{
"mappings": {
"properties": {
"foo": {
"type": "integer",
"index": false
}
}
}
} text поля хранят нормализационные факторы в индексе, чтобы облегчить оценку документов. Если вам нужны только возможности сопоставления с полем text, но вам не важны созданные оценки, вы можете использовать тип match_only_text вместо него. Этот тип поля экономит значительное место, отбросив информацию об оценке и позициях.
Не используйте динамические отображения строк по умолчанию
Динамические отображения строк по умолчанию динамические отображения строк будут индексировать строковые поля как text и keyword. Это приводит к неэффективному использованию ресурсов, если вам нужно только одно из них. Как правило, поле id нужно индексировать только как keyword, а поле body — только как поле text.
Это можно отключить, настроив явные отображения для строковых полей или создав динамические шаблоны, которые будут отображать строковые поля как text или keyword.
Например, вот шаблон, который можно использовать для отображения строковых полей только как keyword:
PUT index
{
"mappings": {
"dynamic_templates": [
{
"strings": {
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
} Следите за размером фрагментов
Более крупные фрагменты будут более эффективны для хранения данных. Чтобы увеличить размер фрагментов, можно уменьшить количество основных фрагментов в индексе, создавая индексы с меньшим количеством основных фрагментов, создавая меньше индексов (например, используя API изменения индекса) или изменяя существующий индекс с помощью API уменьшения индекса.
Помните, что большие размеры фрагментов имеют недостатки, такие как длительные времена полного восстановления.
Отключить поле _source
Поле _source хранит исходный JSON-тело документа. Если вам не нужен к нему доступ, вы можете отключить его. Однако API, которые нуждаются в доступе к _source, такие как обновление и переиндексация, не будут работать.
Используйте best_compression
Поля _source и сохранённые поля могут занимать значительный объем дискового пространства. Их можно сжать более агрессивно, используя кодек best_compression кодек.
Принудительная слияние
Индексы в Elasticsearch хранятся в одном или нескольких фрагментах. Каждый фрагмент представляет собой индекс Lucene и состоит из одного или нескольких сегментов — фактических файлов на диске. Более крупные сегменты более эффективны для хранения данных.
API принудительного слияния можно использовать для уменьшения количества сегментов на фрагмент. Во многих случаях количество сегментов можно уменьшить до одного на фрагмент, установив max_num_segments=1.
Принудительное слияние следует вызывать только после завершения записи в индекс. Принудительное слияние может привести к созданию очень больших (>5 ГБ) сегментов, и если вы продолжаете писать в такой индекс, автоматическая политика слияния никогда не будет рассматривать эти сегменты для будущих слияний, пока они в основном не будут состоять из удаленных документов. Это может привести к сохранению очень больших сегментов в индексе, что может привести к увеличению использования дискового пространства и ухудшению производительности поиска.
Уменьшить индекс
API уменьшения индекса позволяет уменьшить количество фрагментов в индексе. В сочетании с API принудительного слияния выше это может значительно уменьшить количество фрагментов и сегментов индекса.
Используйте наименьший достаточный тип числовых данных
Тип, который вы выбираете для числовых данных, может существенно повлиять на использование дискового пространства. В частности, целые числа должны храниться с использованием целочисленного типа (byte, short, integer или long), а числа с плавающей запятой должны храниться в scaled_float, если это уместно, или в наименьшем типе, соответствующем случаю использования: использование float вместо double или half_float вместо float поможет сэкономить место на диске.
Используйте сортировку индекса для размещения похожих документов вместе
Когда Elasticsearch хранит _source, он сжимает несколько документов одновременно, чтобы улучшить общий коэффициент сжатия. Например, часто бывает, что документы имеют одинаковые имена полей, и довольно часто, что они имеют общие значения полей, особенно в полях с низкой кардинальностью или законом Ципфа.
По умолчанию документы сжимаются вместе в том порядке, в котором они добавляются в индекс. Если вы включили сортировку индекса, то вместо этого они сжимаются в отсортированном порядке. Сортировка документов с похожей структурой, полями и значениями вместе должна улучшить коэффициент сжатия.
Размещайте поля в одном и том же порядке в документах
Из-за того, что несколько документов сжимаются вместе в блоки, вероятнее найти более длинные повторяющиеся строки в этих _source документах, если поля всегда появляются в одном и том же порядке.
Сводка исторических данных
Хранение старых данных может быть полезно для последующего анализа, но часто избегается из-за стоимости хранения. Вы можете использовать сводки данных для обобщения и хранения исторических данных с долей стоимости хранения исходных данных. См. Сводка исторических данных.
© 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/tune-for-disk-usage.html