Настройка индекса

Настройки индекса могут быть двух типов: настройки уровня кластера, которые влияют на все индексы в кластере, и настройки уровня индекса, которые влияют на отдельные индексы.

Чтобы узнать больше о статических и динамических настройках, смотрите Конфигурирование 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"
  }
}

Для получения дополнительной информации об обновлении настроек, включая поддерживаемые параметры запроса, смотрите раздел Обновление настроек.