Настройка индекса
Чтобы узнать больше о статических и динамических настройках, смотрите Конфигурирование OpenSearch.
Настройки индекса уровня кластера
Существует два типа настроек кластера:
- Статические настройки индекса уровня кластера — это настройки, которые нельзя обновить, пока кластер работает. Чтобы обновить статическую настройку, необходимо остановить кластер, обновить настройку, а затем перезапустить кластер.
- Динамические настройки индекса уровня кластера — это настройки, которые можно обновлять в любое время.
Статические настройки индекса уровня кластера
OpenSearch поддерживает следующие статические настройки индекса уровня кластера:
-
indices.cache.cleanup_interval
(Единица времени): Запланирует периодическую фоновую задачу, которая очищает истекшие записи из кэша с указанным интервалом. По умолчанию 1m (1 минута). Для получения дополнительной информации смотрите Кэш запросов индекса. -
indices.requests.cache.size
(Строка): Размер кэша в процентах от размера кучи (например, чтобы использовать 1% кучи, укажите 1%). По умолчанию 1%. Для получения дополнительной информации смотрите Кэш запросов индекса.
Динамические настройки индекса уровня кластера
OpenSearch поддерживает следующие динамические настройки индекса уровня кластера:
-
action.auto_create_index
(Булевый): Автоматически создает индекс, если индекс еще не существует. Также применяет любые конфигурации шаблонов индексов. По умолчанию true. -
indices.recovery.max_concurrent_file_chunks
(Целое число): Количество частей файлов, отправляемых параллельно для каждой операции восстановления. По умолчанию 2. -
indices.recovery.max_concurrent_operations
(Целое число): Количество операций, отправляемых параллельно для каждого восстановления. По умолчанию 1. -
indices.recovery.max_concurrent_remote_store_streams
(Целое число): Количество потоков к удаленному репозиторию, которые могут быть открыты параллельно при восстановлении индекса из удаленного хранилища. По умолчанию 20. -
indices.replication.max_bytes_per_sec
(Строка): Ограничивает общий входящий и исходящий трафик репликации для каждого узла. Если значение не указано в конфигурации, используется настройкаindices.recovery.max_bytes_per_sec
, по умолчанию равная 40 МБ. Если вы установите значение трафика репликации меньше или равным 0 МБ, ограничение скорости будет отключено, что приведет к передаче данных репликации с максимальной возможной скоростью. -
indices.fielddata.cache.size
(Строка): Максимальный размер кэша данных полей. Может быть указан как абсолютное значение (например, 8 ГБ) или процент от кучи узла (например, 50%). Это значение статическое, поэтому его необходимо указать в файлеopensearch.yml
. Если вы не укажете эту настройку, максимальный размер будет неограниченным. Это значение должно быть меньше, чемindices.breaker.fielddata.limit
. Для получения дополнительной информации смотрите Систему защиты от переполнения кэша данных полей. -
indices.query.bool.max_clause_count
(Целое число): Определяет максимальное произведение полей и терминов, которые могут быть запрошены одновременно. До версии OpenSearch 2.16 для применения этой статической настройки требовалась перезагрузка кластера. Теперь она динамическая, существующие пулы потоков поиска могут использовать старое статическое значение, что может привести к исключениям TooManyClauses. Новые пулы потоков используют обновленное значение. По умолчанию 1024. -
cluster.remote_store.index.path.type
(Строка): Стратегия пути для данных, хранящихся в удаленном хранилище. Эта настройка эффективна только для кластеров с включенным удаленным хранилищем. Эта настройка поддерживает следующие значения:fixed
: Хранит данные в структуре пути<repository_base_path>/<index_uuid>/<shard_id>/
.hashed_prefix
: Хранит данные в структуре путиhash(<shard-data-identifier>)/<repository_base_path>/<index_uuid>/<shard_id>/
.hashed_infix
: Хранит данные в структуре пути<repository_base_path>/hash(<shard-data-identifier>)/<index_uuid>/<shard_id>/
.shard-data-identifier
характеризуетсяindex_uuid
,shard_id
, типом данных (translog, segments) и типом данных (data, metadata, lock_files). По умолчаниюfixed
.
-
cluster.remote_store.index.path.hash_algorithm
(Строка): Хеш-функция, используемая для получения хеш-значения, когдаcluster.remote_store.index.path.type
установлено наhashed_prefix
илиhashed_infix
. Эта настройка эффективна только для кластеров с включенным удаленным хранилищем. Эта настройка поддерживает следующие значения:fnv_1a_base64
: Использует хеш-функцию FNV1a и генерирует безопасное для URL 20-битное хеш-значение в формате base64.fnv_1a_composite_1
: Использует хеш-функцию FNV1a и генерирует пользовательское закодированное хеш-значение, которое хорошо масштабируется с большинством опций удаленного хранилища. Функция FNV1a генерирует 64-битное значение. Пользовательское кодирование использует 6 старших бит для создания безопасного для URL символа base64 и следующие 14 бит для создания двоичной строки. По умолчаниюfnv_1a_composite_1
.
-
cluster.remote_store.translog.transfer_timeout
(Единица времени): Управляет значением таймаута при загрузке файлов translog и контрольных точек во время синхронизации с удаленным хранилищем. Эта настройка применяется только для кластеров с включенным удаленным хранилищем. По умолчанию 30 секунд. -
cluster.remote_store.index.segment_metadata.retention.max_count
(Целое число): Управляет минимальным количеством файлов метаданных, которые необходимо сохранить в репозитории сегментов на удаленном хранилище. Значение ниже 1 отключает удаление устаревших файлов метаданных сегментов. По умолчанию 10. -
cluster.remote_store.segment.transfer_timeout
(Единица времени): Управляет максимальным временем ожидания обновления всех новых сегментов после обновления в удаленное хранилище. Если загрузка не завершится в течение указанного времени, будет выброшено исключение SegmentUploadFailedException. По умолчанию 30 минут. Минимальное ограничение составляет 10 минут. -
cluster.remote_store.translog.path.prefix
(Строка): Управляет фиксированным префиксом пути для данных translog на кластере с включенным удаленным хранилищем. Эта настройка применяется только в том случае, если настройкаcluster.remote_store.index.path.type
установлена наHASHED_PREFIX
илиHASHED_INFIX
. По умолчанию пустая строка, “”. -
cluster.remote_store.segments.path.prefix
(Строка): Управляет фиксированным префиксом пути для данных сегментов на кластере с включенным удаленным хранилищем. Эта настройка применяется только в том случае, если настройкаcluster.remote_store.index.path.type
установлена наHASHED_PREFIX
илиHASHED_INFIX
. По умолчанию пустая строка, “”. -
cluster.snapshot.shard.path.prefix
(Строка): Управляет фиксированным префиксом пути для блобов уровня сегмента снимка. Эта настройка применяется только в том случае, если настройкаrepository.shard_path_type
установлена наHASHED_PREFIX
илиHASHED_INFIX
. По умолчанию пустая строка, “”. -
cluster.default_number_of_replicas
(Целое число): Управляет значением по умолчанию для количества реплик индексов в кластере. Настройка уровня индексаindex.number_of_replicas
по умолчанию принимает это значение, если не настроена. По умолчанию 1. -
cluster.thread_pool.<fixed-threadpool>.size
(Целое число): Управляет размерами как фиксированных, так и изменяемых очередей пулов потоков. Переопределяет значения по умолчанию, указанные вopensearch.yml
. -
cluster.thread_pool.<scaling-threadpool>.max
(Целое число): Устанавливает максимальный размер пула потоков с изменяемым размером. Переопределяет значение по умолчанию, указанное вopensearch.yml
. -
cluster.thread_pool.<scaling-threadpool>.core
(Целое число): Указывает базовый размер пула потоков с изменяемым размером. Переопределяет значение по умолчанию, указанное вopensearch.yml
.
Настройки индекса уровня индекса
Вы можете указать настройки индекса при создании индекса. Существует два типа настроек индекса:
-
Статические настройки индекса уровня индекса — это настройки, которые нельзя обновить, пока индекс открыт. Чтобы обновить статическую настройку, необходимо закрыть индекс, обновить настройку, а затем снова открыть индекс.
-
Динамические настройки индекса уровня индекса — это настройки, которые можно обновлять в любое время.
Указание настройки при создании индекса
При создании индекса вы можете указать его статические или динамические настройки следующим образом:
PUT /testindex
{
"settings": {
"index.number_of_shards": 1,
"index.number_of_replicas": 2
}
}
Статические настройки индекса уровня индекса
OpenSearch поддерживает следующие статические настройки индекса уровня индекса:
-
index.number_of_shards
(Целое число): Количество первичных шардов в индексе. По умолчанию 1. -
index.number_of_routing_shards
(Целое число): Количество шардов маршрутизации, используемых для разделения индекса. -
index.shard.check_on_startup
(Булевый): Указывает, следует ли проверять шардов индекса на наличие повреждений. Доступные опции:false
(не проверять на повреждения),checksum
(проверять на физические повреждения),true
(проверять как на физические, так и на логические повреждения). По умолчаниюfalse
.
-
index.codec
(Строка): Определяет, как сжимаются и хранятся на диске сохраненные поля индекса. Эта настройка влияет на размер шардов индекса и производительность операций индексации.Допустимые значения:
default
best_compression
zstd
(OpenSearch 2.9 и позже)zstd_no_dict
(OpenSearch 2.9 и позже)qat_lz4
(OpenSearch 2.14 и позже, на поддерживаемых системах)qat_deflate
(OpenSearch 2.14 и позже, на поддерживаемых системах)
Для
zstd
,zstd_no_dict
,qat_lz4
иqat_deflate
вы можете указать уровень сжатия в настройкеindex.codec.compression_level
. Для получения дополнительной информации смотрите Настройки кодека индекса. Опционально. По умолчаниюdefault
. -
index.codec.compression_level
(Целое число): Настройка уровня сжатия обеспечивает компромисс между коэффициентом сжатия и скоростью. Более высокий уровень сжатия приводит к более высокому коэффициенту сжатия (меньший размер хранения), но замедляет скорость сжатия и распаковки, что приводит к увеличению задержек при индексации и поиске. Эта настройка может быть указана только еслиindex.codec
установлен наzstd
иzstd_no_dict
в OpenSearch 2.9 и позже илиqat_lz4
иqat_deflate
в OpenSearch 2.14 и позже. Допустимые значения — целые числа в диапазоне [1, 6]. Для получения дополнительной информации смотрите Настройки кодека индекса. Опционально. По умолчанию 3. -
index.codec.qatmode
(Строка): Режим аппаратного ускорения, используемый для кодеков сжатияqat_lz4
иqat_deflate
. Допустимые значения:auto
иhardware
. Для получения дополнительной информации смотрите Настройки кодека индекса. Опционально. По умолчаниюauto
. -
index.routing_partition_size
(Целое число): Количество шардов, к которым может быть направлено значение пользовательской маршрутизации. Маршрутизация помогает несбалансированному кластеру, перемещая значения к подмножеству шардов, а не к одному шару. Чтобы включить маршрутизацию, установите это значение больше 1, но меньшеindex.number_of_shards
. По умолчанию 1. -
index.soft_deletes.retention_lease.period
(Единица времени): Максимальное время хранения истории операций шара. По умолчанию 12 часов. -
index.load_fixed_bitset_filters_eagerly
(Булевый): Указывает, должен ли OpenSearch предварительно загружать кэшированные фильтры. Доступные опции:true
иfalse
. По умолчаниюtrue
. -
index.hidden
(Булевый): Указывает, должен ли индекс быть скрытым. Скрытые индексы не возвращаются в результате запросов, содержащих подстановочные знаки. Доступные опции:true
иfalse
. По умолчаниюfalse
. -
index.merge.policy
(Строка): Эта настройка управляет политикой слияния для сегментов Lucene. Доступные опции:tiered
иlog_byte_size
. По умолчаниюtiered
, но для временных данных, таких как журналы событий, рекомендуется использовать политику слиянияlog_byte_size
, которая может улучшить производительность запросов при выполнении диапазонных запросов по полю@timestamp
. Рекомендуется не изменять политику слияния существующего индекса. Вместо этого настройте эту опцию при создании нового индекса. -
index.merge_on_flush.enabled
(Булевый): Эта настройка управляет функцией слияния при обновлении Apache Lucene, которая направлена на уменьшение количества сегментов путем выполнения слияний при обновлении (или, в терминах OpenSearch, при сбросе). По умолчаниюtrue
. -
index.merge_on_flush.max_full_flush_merge_wait_time
(Единица времени): Эта настройка устанавливает время ожидания для слияний, когдаindex.merge_on_flush.enabled
включен. По умолчанию 10 секунд. -
index.merge_on_flush.policy
(Строка): Эта настройка управляет тем, какая политика слияния должна использоваться, когдаindex.merge_on_flush.enabled
включен. По умолчаниюdefault
. -
index.check_pending_flush.enabled
(Булевый): Эта настройка управляет параметромcheckPendingFlushOnUpdate
индексации Apache Lucene, который указывает, должен ли поток индексации проверять наличие ожидающих сбросов при обновлении, чтобы сбросить буферы индексации на диск. По умолчаниюtrue
. -
index.use_compound_file
(Булевый): Эта настройка управляет параметрамиuseCompoundFile
индексации Apache Lucene, которые указывают, будут ли новые файлы сегментов упакованы в составной файл. По умолчаниюtrue
. -
index.append_only.enabled
(Булевый): Установите значениеtrue
, чтобы предотвратить любые обновления документов в индексе. По умолчаниюfalse
.
Обновление статической настройки индекса
Вы можете обновить статическую настройку индекса только для закрытого индекса. Следующий пример демонстрирует обновление настройки кодека индекса.
Сначала закройте индекс:
POST /testindex/_close
Затем обновите настройки, отправив запрос к конечной точке _settings
:
PUT /testindex/_settings
{
"index": {
"codec": "zstd_no_dict",
"codec.compression_level": 3
}
}
Наконец, снова откройте индекс, чтобы включить операции чтения и записи:
POST /testindex/_open
Для получения дополнительной информации об обновлении настроек, включая поддерживаемые параметры запроса, смотрите Обновление настроек.
Динамические настройки индекса уровня индекса
OpenSearch поддерживает следующие динамические настройки индекса уровня индекса:
-
index.number_of_replicas
(Целое число): Количество реплик, которые должен иметь каждый первичный шард. Например, если у вас 4 первичных шарда и вы установитеindex.number_of_replicas
на 3, индекс будет иметь 12 реплик. Если не установлено, по умолчанию используется значениеcluster.default_number_of_replicas
(по умолчанию 1). -
index.number_of_search_replicas
(Целое число): Количество поисковых реплик, которые должен иметь каждый первичный шард. Например, если у вас 4 первичных шарда и вы установитеindex.number_of_search_replicas
на 3, индекс будет иметь 12 поисковых реплик. По умолчанию 0. -
index.auto_expand_replicas
(Строка): Указывает, должен ли кластер автоматически добавлять реплики на основе количества узлов данных. Укажите нижнюю и верхнюю границы (например, 0–9) илиall
для верхней границы. Например, если у вас 5 узлов данных и вы установитеindex.auto_expand_replicas
на 0–3, кластер не добавит еще одну реплику. Однако, если вы установите это значение на 0-all и добавите 2 узла, всего 7, кластер расширится до 6 реплик. По умолчанию отключено. -
index.auto_expand_search_replicas
(Строка): Управляет тем, автоматически ли кластер регулирует количество поисковых реплик на основе количества доступных узлов поиска. Укажите значение в виде диапазона с нижней и верхней границей, например, 0-3 или 0-all. Если вы не укажете значение, эта функция отключена.Например, если у вас 5 узлов данных и вы установите
index.auto_expand_search_replicas
на 0-3, индекс может иметь до 3 поисковых реплик, и кластер не добавит еще одну поисковую реплику. Однако, если вы установитеindex.auto_expand_search_replicas
на 0-all и добавите 2 узла, всего 7, кластер расширится до 7 поисковых реплик. Эта настройка по умолчанию отключена. -
index.search.idle.after
(Единица времени): Время, в течение которого шард должен ждать запроса поиска или получения, прежде чем перейти в состояние ожидания. По умолчанию 30 секунд. -
index.search.default_pipeline
(Строка): Имя поискового конвейера, который используется, если при поиске индекса не установлен явный конвейер. Если установлен конвейер по умолчанию и он не существует, запросы к индексу завершатся неудачей. Используйте имя конвейера_none
, чтобы указать отсутствие конвейера поиска по умолчанию. Для получения дополнительной информации смотрите Конвейер поиска по умолчанию. -
index.refresh_interval
(Единица времени): Как часто индекс должен обновляться, что публикует его последние изменения и делает их доступными для поиска. Может быть установлено на -1 для отключения обновления. По умолчанию 1 секунда. -
index.max_result_window
(Целое число): Максимальное значениеfrom + size
для запросов к индексу.from
— это начальный индекс для поиска, аsize
— количество результатов для возврата. По умолчанию 10000. -
index.max_inner_result_window
(Целое число): Максимальное значениеfrom + size
, которое указывает количество возвращаемых вложенных результатов поиска и наиболее релевантных документов, агрегированных во время запроса.from
— это начальный индекс для поиска, аsize
— количество верхних результатов для возврата. По умолчанию 100. -
index.max_rescore_window
(Целое число): Максимальное значениеwindow_size
для запросов пересчета к индексу. Запросы пересчета изменяют порядок документов индекса и возвращают новый балл, который может быть более точным. По умолчанию такое же, какindex.max_inner_result_window
, или 10000 по умолчанию. -
index.max_docvalue_fields_search
(Целое число): Максимальное количествоdocvalue_fields
, разрешенных в запросе. По умолчанию 100. -
index.max_script_fields
(Целое число): Максимальное количествоscript_fields
, разрешенных в запросе. По умолчанию 32. -
index.max_ngram_diff
(Целое число): Максимальная разница между значениямиmin_gram
иmax_gram
дляNGramTokenizer
иNGramTokenFilter
. По умолчанию 1. -
index.max_shingle_diff
(Целое число): Максимальная разница междуmax_shingle_size
иmin_shingle_size
, которая подается в фильтр токеновshingle
. По умолчанию 3. -
index.max_refresh_listeners
(Целое число): Максимальное количество слушателей обновления, которые может иметь каждый шард. -
index.analyze.max_token_count
(Целое число): Максимальное количество токенов, которые могут быть возвращены из операции API_analyze
. По умолчанию 10000. -
index.highlight.max_analyzed_offset
(Целое число): Количество символов, которые может анализировать запрос на выделение. По умолчанию 1000000. -
index.max_terms_count
(Целое число): Максимальное количество терминов, которые может принять запрос терминов. По умолчанию 65536. -
index.max_regex_length
(Целое число): Максимальная длина символов регулярного выражения, которое может быть в запросеregexp
. По умолчанию 1000. -
index.query.default_field
(Список): Поле или список полей, которые OpenSearch использует в запросах, если поле не указано в параметрах. -
index.query.max_nested_depth
(Целое число): Максимальное количество уровней вложенности для вложенных запросов. По умолчанию 20. Минимум 1 (один вложенный запрос). -
index.requests.cache.enable
(Булевый): Включает или отключает кэш запросов индекса. По умолчаниюtrue
. Для получения дополнительной информации смотрите Кэш запросов индекса. -
index.routing.allocation.enable
(Строка): Указывает параметры для распределения шардов индекса. Доступные опции:all
(разрешить распределение для всех шардов),primaries
(разрешить распределение только для первичных шардов),new_primaries
(разрешить распределение только для новых первичных шардов),none
(не разрешать распределение). По умолчаниюall
.
-
index.routing.rebalance.enable
(Строка): Включает перераспределение шардов для индекса. Доступные опции:all
(разрешить перераспределение для всех шардов),primaries
(разрешить перераспределение только для первичных шардов),replicas
(разрешить перераспределение только для реплик),none
(не разрешать перераспределение). По умолчаниюall
.
-
index.gc_deletes
(Единица времени): Время хранения номера версии удаленного документа. По умолчанию 60 секунд. -
index.default_pipeline
(Строка): Конвейер узла обработки по умолчанию для индекса. Если установлен конвейер по умолчанию и он не существует, запросы к индексу завершатся неудачей. Имя конвейера_none
указывает на то, что у индекса нет конвейера обработки. -
index.final_pipeline
(Строка): Конечный конвейер узла обработки для индекса. Если установлен конечный конвейер и он не существует, запросы к индексу завершатся неудачей. Имя конвейера_none
указывает на то, что у индекса нет конвейера обработки. -
index.optimize_doc_id_lookup.fuzzy_set.enabled
(Булевый): Эта настройка управляет тем, следует ли включатьfuzzy_set
для оптимизации поиска идентификаторов документов в индексах или запросах, используя дополнительную структуру данных, в данном случае структуру данных Bloom filter. Включение этой настройки улучшает производительность операцийupsert
и поиска, которые зависят от идентификаторов документов, создавая новую структуру данных (Bloom filter). Bloom filter позволяет обрабатывать отрицательные случаи (то есть идентификаторы, отсутствующие в существующем индексе) с помощью более быстрых обращений вне кучи. Обратите внимание, что создание Bloom filter требует дополнительного использования кучи во время индексации. По умолчаниюfalse
. -
index.optimize_doc_id_lookup.fuzzy_set.false_positive_probability
(Число с плавающей точкой)
Устанавливает вероятность ложного срабатывания для базового fuzzy_set
(то есть, фильтра Блума). Более низкая вероятность ложного срабатывания обеспечивает более высокую пропускную способность для операций upsert
и get
, но приводит к увеличению использования памяти и хранилища. Допустимые значения находятся в диапазоне от 0.01 до 0.50. По умолчанию установлено значение 0.20.
index.routing.allocation.total_shards_per_node
(Целое число)
Максимальное общее количество первичных и репликационных шардов из одного индекса, которые могут быть распределены на один узел. По умолчанию установлено значение -1 (без ограничений). Помогает контролировать распределение шардов по узлам для каждого индекса, ограничивая количество шардов на узел. Используйте с осторожностью, так как шары из этого индекса могут оставаться нераспределенными, если узлы достигнут своих настроенных лимитов.
index.routing.allocation.total_primary_shards_per_node
(Целое число)
Максимальное количество первичных шардов из одного индекса, которые могут быть распределены на один узел. Эта настройка применима только для кластеров с удаленной поддержкой. По умолчанию установлено значение -1 (без ограничений). Помогает контролировать распределение первичных шардов по узлам для каждого индекса, ограничивая количество первичных шардов на узел. Используйте с осторожностью, так как первичные шары из этого индекса могут оставаться нераспределенными, если узлы достигнут своих настроенных лимитов.
Обновление динамической настройки индекса
Вы можете обновить динамическую настройку индекса в любое время через API. Например, чтобы обновить интервал обновления, используйте следующий запрос:
PUT /testindex/_settings
{
"index": {
"refresh_interval": "2s"
}
}
Для получения дополнительной информации об обновлении настроек, включая поддерживаемые параметры запроса, смотрите раздел Обновление настроек.