Link Search Menu Expand Document Documentation Menu

索引设置

索引设置有两种类型:集群级设置会影响集群中的所有索引,而索引级设置则会影响单个索引。

要了解有关静态和动态设置的更多信息,请参阅配置 OpenSearch

集群级索引设置

集群设置有两种类型:

静态集群级索引设置

OpenSearch 支持以下静态集群级索引设置:

  • indices.cache.cleanup_interval(时间单位):安排一个周期性后台任务,按指定间隔清理缓存中过期的条目。默认值为 1m(1 分钟)。更多信息,请参阅索引请求缓存

  • indices.requests.cache.size(字符串):缓存大小,表示为堆大小的百分比(例如,要使用堆的 1%,请指定 1%)。默认值为 1%。更多信息,请参阅索引请求缓存

动态集群级索引设置

OpenSearch 支持以下动态集群级索引设置:

  • action.auto_create_index(布尔值):如果索引不存在,则自动创建索引。还会应用所有已配置的索引模板。默认值为 true

  • action.destructive_requires_name(布尔值):当设置为 true 时,您必须指定索引名称才能删除索引。您不能删除所有索引或使用通配符。默认值为 false

  • cluster.default.index.refresh_interval(时间单位):当未提供 index.refresh_interval 设置时,设置刷新间隔。此设置在您想要在集群中的所有索引上设置默认刷新间隔并支持 searchIdle 设置时可能有用。您不能将间隔设置低于 cluster.minimum.index.refresh_interval 设置。

  • cluster.minimum.index.refresh_interval(时间单位):设置最小刷新间隔并将其应用于集群中的所有索引。cluster.default.index.refresh_interval 设置应高于此设置的值。如果在索引创建期间 index.refresh_interval 设置低于设定的最小值,则索引创建将失败。

  • cluster.indices.close.enable(布尔值):启用 OpenSearch 中开放索引的关闭。默认值为 true

  • indices.recovery.max_bytes_per_sec(字符串):限制每个节点的总入站和出站恢复流量。这适用于对等恢复和快照恢复。默认值为 40mb。如果将恢复流量值设置为小于或等于 0mb,则将禁用速率限制,导致恢复数据以最高可能速率传输。

  • 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 MB。如果将复制流量值设置为小于或等于 0 MB,则禁用速率限制,从而导致复制数据以最高可能速率传输。

  • indices.fielddata.cache.size(字符串):字段数据缓存的最大大小。可以指定为绝对值(例如,8GB)或节点堆的百分比(例如,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-idenitifer>)/<repository_base_path>/<index_uuid>/<shard_id>/ 中。
    • hashed_infix:将数据存储在路径结构 <repository_base_path>/hash(<shard-data-idenitifer>)/<index_uuid>/<shard_id>/ 中。shard-data-idenitifer 以 index_uuid、shard_id、数据类型(事务日志、段)和数据类型(数据、元数据、锁文件)为特征。默认值为 fixed
  • cluster.remote_store.index.path.hash_algorithm(字符串):当 cluster.remote_store.index.path.type 设置为 hashed_prefixhashed_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(时间单位):控制在同步到远程存储期间上传事务日志和检查点文件时的超时值。此设置仅适用于启用远程存储的集群。默认值为 30s

  • cluster.remote_store.index.segment_metadata.retention.max_count(整数):控制在远程存储的段仓库中保留的元数据文件的最小数量。低于 1 的值会禁用陈旧段元数据文件的删除。默认值为 10

  • cluster.remote_store.segment.transfer_timeout(时间单位):控制刷新到远程存储后等待所有新段更新的最长时间。如果上传未在指定时间内完成,将抛出 SegmentUploadFailedException 错误。默认值为 30m。它的最小约束为 10m

  • cluster.remote_store.translog.path.prefix(字符串):控制启用远程存储的集群上事务日志数据的固定路径前缀。此设置仅在 cluster.remote_store.index.path.type 设置为 HASHED_PREFIXHASHED_INFIX 时适用。默认值为空字符串,""

  • cluster.remote_store.segments.path.prefix(字符串):控制启用远程存储的集群上段数据的固定路径前缀。此设置仅在 cluster.remote_store.index.path.type 设置为 HASHED_PREFIXHASHED_INFIX 时适用。默认值为空字符串,""

  • cluster.snapshot.shard.path.prefix(字符串):控制快照分片级 blob 的固定路径前缀。此设置仅在存储库的 shard_path_type 设置为 HASHED_PREFIXHASHED_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 及更高版本,适用于支持的系统)

对于 zstdzstd_no_dictqat_lz4qat_deflate,您可以在 index.codec.compression_level 设置中指定压缩级别。更多信息,请参阅索引编解码器设置。可选。默认值为 default

  • index.codec.compression_level (整数): 压缩级别设置在压缩比和速度之间提供了权衡。更高的压缩级别会带来更高的压缩比(更小的存储大小),但会降低压缩和解压缩速度,从而导致更高的索引和搜索延迟。此设置仅在 OpenSearch 2.9 及更高版本中将 index.codec 设置为 zstdzstd_no_dict,或在 OpenSearch 2.14 及更高版本中设置为 qat_lz4qat_deflate 时才能指定。有效值为 [1, 6] 范围内的整数。更多信息,请参阅索引编解码器设置。可选。默认值为 3。

  • index.codec.qatmode (字符串): 用于 qat_lz4qat_deflate 压缩编解码器的硬件加速模式。有效值为 autohardware。更多信息,请参阅索引编解码器设置。可选。默认值为 auto

  • index.routing_partition_size (整数): 自定义路由值可以指向的分片数量。路由通过将值重新定位到分片的子集而不是单个分片来帮助解决不平衡的集群。要启用路由,请将此值设置为大于 1 但小于 index.number_of_shards。默认值为 1。

  • index.soft_deletes.retention_lease.period (时间单位): 保留分片操作历史记录的最长时间。默认值为 12h

  • index.load_fixed_bitset_filters_eagerly (布尔值): OpenSearch 是否应预加载缓存的过滤器。可用选项为 truefalse。默认值为 true

  • index.hidden (布尔值): 索引是否应隐藏。隐藏索引不会作为包含通配符的查询的一部分返回。可用选项为 truefalse。默认值为 false

  • index.merge.policy (字符串): 此设置控制 Lucene 段的合并策略。可用选项为 tieredlog_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 启用时等待合并的时间。默认值为 10s

  • index.merge_on_flush.policy (默认 刷新时合并): 此设置控制当 index.merge_on_flush.enabled 启用时应使用哪个合并策略。默认值为 default
  • index.check_pending_flush.enabled (布尔值): 此设置控制 Apache Lucene 的 checkPendingFlushOnUpdate 索引写入器设置,该设置指定索引线程在更新时是否应检查待处理的刷新,以便将索引缓冲区刷新到磁盘。默认值为 true

  • index.use_compound_file (布尔值): 此设置控制 Apache Lucene 的 useCompoundFile 索引写入器设置,该设置指定新写入的段文件是否将打包成一个复合文件。默认值为 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-30-all。如果您未指定值,则此功能将被禁用。

    例如,如果您有 5 个数据节点并将 index.auto_expand_search_replicas 设置为 0-3,则该索引最多可以有 3 个搜索副本,并且集群不会自动添加另一个搜索副本分片。但是,如果您将 index.auto_expand_search_replicas 设置为 0-all 并再添加 2 个节点(总共 7 个),则集群将扩展到现在拥有 7 个搜索副本分片。此设置默认情况下处于禁用状态。

  • index.search.idle.after (时间单位): 分片在进入空闲状态之前应等待搜索或获取请求的时间量。默认值为 30s

  • index.search.default_pipeline (字符串): 搜索索引时未显式设置管道的情况下使用的搜索管道的名称。如果设置了默认管道且该管道不存在,则索引请求将失败。使用管道名称 _none 指定没有默认搜索管道。更多信息,请参阅默认搜索管道

  • index.refresh_interval (时间单位): 索引应刷新的频率,刷新会发布其最新更改并使其可用于搜索。可以设置为 -1 以禁用刷新。默认值为 1s

  • 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 (整数): NGramTokenizerNGramTokenFiltermin_grammax_gram 值之间的最大差异。默认值为 1。

  • index.max_shingle_diff (整数): 馈入 shingle 标记过滤器时 max_shingle_sizemin_shingle_size 之间的最大差异。默认值为 3。

  • index.max_refresh_listeners (整数): 每个分片允许的最大刷新侦听器数量。

  • index.analyze.max_token_count (整数): 可从 _analyze API 操作返回的最大标记数。默认值为 10000。

  • index.highlight.max_analyzed_offset (整数): 高亮请求可以分析的最大字符数。默认值为 1000000。

  • index.max_terms_count (整数): 术语查询可以接受的最大术语数量。默认值为 65536。

  • index.max_regex_length (整数): 正则表达式查询中正则表达式的最大字符长度。默认值为 1000。

  • index.query.default_field (列表): OpenSearch 在查询中使用的字段或字段列表,以防参数中未指定字段。

  • index.query.max_nested_depth (整数): nested 查询的最大嵌套级别数。默认值为 20。最小值为 1(单个 nested 查询)。

  • 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 (时间单位): 保留已删除文档版本号的时间量。默认值为 60s

  • index.default_pipeline (字符串): 索引的默认摄入节点管道。如果设置了默认管道且该管道不存在,则索引请求将失败。管道名称 _none 指定索引没有摄入管道。

  • index.final_pipeline (字符串): 索引的最终摄入节点管道。如果设置了最终管道且该管道不存在,则索引请求将失败。管道名称 _none 指定索引没有摄入管道。

  • index.optimize_doc_id_lookup.fuzzy_set.enabled (布尔值): 此设置控制是否应启用 fuzzy_set,以便通过使用额外的数据结构(在本例中为布隆过滤器数据结构)来优化索引或搜索调用中的文档 ID 查找。启用此设置可通过创建新的数据结构(布隆过滤器)来提高依赖文档 ID 的更新插入和搜索操作的性能。布隆过滤器通过更快的堆外查找来处理负面情况(即现有索引中不存在 ID)。请注意,创建布隆过滤器在索引期间需要额外的堆使用。默认值为 false

  • index.optimize_doc_id_lookup.fuzzy_set.false_positive_probability (双精度浮点数): 设置底层 fuzzy_set(即布隆过滤器)的误报概率。较低的误报概率可确保更新插入和获取操作的更高吞吐量,但会导致存储和内存使用量增加。允许的值介于 0.010.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"
  }
}

有关更新设置的更多信息,包括支持的查询参数,请参阅更新设置