索引模块

edit

索引模块是按索引创建的模块,控制与索引相关的所有方面。

索引设置

edit

索引级别的设置可以按每个索引进行设置。设置可以是:

static
它们只能在索引创建时或在 关闭的索引上设置,或者通过使用 更新索引设置 API 并将 reopen 查询参数设置为 true(这将自动关闭并重新打开受影响的索引)。
dynamic
他们可以在使用 更新索引设置 API 的实时索引上进行更改。

您可以在已关闭的索引上更改任何已记录的索引设置。然而,更改未记录的索引设置在已关闭的索引上是不受支持的,并且可能会导致错误。

静态索引设置

edit

以下是所有不与任何特定索引模块关联的静态索引设置列表:

index.number_of_shards

索引应具有的主分片数量。默认为 1。此设置只能在索引创建时设置。它不能在已关闭的索引上更改。

每个索引的分片数量限制为1024。此限制是为了防止意外创建可能导致资源分配不均从而使集群不稳定的索引。可以通过在集群中的每个节点上指定系统属性export ES_JAVA_OPTS="-Des.index.max_number_of_shards=128"来修改此限制。

index.number_of_routing_shards

index.number_of_shards一起使用的整数值,用于将文档路由到主分片。请参阅_routing字段

Elasticsearch 在 拆分 索引时使用此值。 例如,一个包含 5 个分片的索引,如果将 number_of_routing_shards 设置为 305 x 2 x 3),则可以通过因子 23 进行拆分。换句话说,它可以按以下方式拆分:

  • 51030 (split by 2, then by 3)
  • 51530 (split by 3, then by 2)
  • 530 (split by 6)

此设置的默认值取决于索引中的主分片数量。默认设置旨在允许您按2的倍数进行拆分,最多可达1024个分片。

在 Elasticsearch 7.0.0 及更高版本中,此设置会影响文档在分片之间的分布方式。当使用自定义路由重新索引旧索引时,您必须显式设置 index.number_of_routing_shards 以保持相同的文档分布。请参阅 相关的重大更改

index.codec
default 值使用 LZ4 压缩存储的数据,但可以将其设置为 best_compression, 该设置使用 ZSTD 以获得更高的压缩比,但会牺牲存储字段读取性能。 如果您正在更新压缩类型,新的压缩类型将在段合并后应用。可以使用 force merge 强制进行段合并。对索引日志数据集的实验表明, best_compression 相比 default 可以减少高达 ~28% 的存储使用量,并且索引吞吐量相似(有时根据其他使用的选项稍慢或稍快), 同时影响按 ID 获取的延迟在 ~10% 到 ~33% 之间。对于许多用例(如日志记录或指标),较高的按 ID 获取延迟并不是问题,因为这些用例并不真正依赖于按 ID 获取功能(Get API 或通过 _id 搜索)。
index.mode

设置 index.mode 用于控制特定领域(如时间序列数据或日志的摄取)中应用的设置。 存在不同的互斥模式,这些模式用于应用控制文档索引、排序和其他影响索引或查询性能的参数的设置或默认值。

PUT my-index-000001
{
  "settings": {
    "index":{
      "mode":"standard" 
    }
  }
}

此索引使用标准索引模式

索引模式支持以下值:

null
默认值(与 standard 相同)。
standard
标准索引,使用默认设置。
time_series
针对存储在 TSDS 设置 中的指标文档进行优化的索引模式。
logsdb
针对存储日志进行优化的索引模式。它对 hostnametimestamp 字段应用默认排序设置,并使用 合成 _source。仍然允许对不同字段进行 索引排序 [预览] 此功能处于技术预览阶段,可能会在未来的版本中更改或删除。Elastic 将努力修复任何问题,但技术预览中的功能不受官方 GA 功能支持 SLA 的约束。
index.routing_partition_size
自定义路由值可以到达的分片数量。 默认为1,并且只能在索引创建时设置。此值必须小于index.number_of_routing_shards,除非index.number_of_routing_shards的值也是1。 有关此设置如何使用的更多详细信息,请参阅路由到索引分区
index.soft_deletes.enabled
[7.6.0] 在7.6.0中已弃用。创建禁用软删除的索引已被弃用,并将在未来的Elasticsearch版本中移除。 指示索引上是否启用了软删除。软删除只能在索引创建时配置,并且只能在Elasticsearch 6.5.0或更高版本创建的索引上配置。默认为true
index.soft_deletes.retention_lease.period
在分片历史保留租约被视为过期之前保留的最大期限。分片历史保留租约确保在Lucene索引合并期间保留软删除。如果软删除在可以复制到跟随者之前被合并掉,由于领导者上的历史记录不完整,后续过程将失败。默认为12h
index.load_fixed_bitset_filters_eagerly
指示是否为嵌套查询预加载缓存过滤器。可能的值为true(默认)和false
index.shard.check_on_startup

仅限专家用户。此设置在分片启动时启用一些非常昂贵的处理,仅在诊断集群中的问题时才有用。如果确实使用它,应仅临时使用并在不再需要时将其移除。

Elasticsearch 在分片生命周期的各个阶段自动执行对其内容的完整性检查。例如,在恢复副本或进行快照时,它会验证传输的每个文件的校验和。在打开分片时(这发生在启动节点以及完成分片恢复或重新定位时),它还会验证许多重要文件的完整性。因此,您可以在分片运行时通过将其快照到一个新的存储库或将其恢复到一个新的节点来手动验证整个分片的完整性。

此设置决定 Elasticsearch 在打开分片时是否执行额外的完整性检查。如果这些检查检测到损坏,它们将阻止分片被打开。它接受以下值:

false
在打开分片时不执行额外的损坏检查。 这是默认且推荐的行为。
checksum
验证分片中每个文件的校验和是否与其内容匹配。这将检测到从磁盘读取的数据与 Elasticsearch 最初写入的数据不同的情况,例如由于未检测到的磁盘损坏或其他硬件故障。这些检查需要从磁盘读取整个分片,这需要大量的时间和 IO 带宽,并且可能会通过从文件系统缓存中驱逐重要数据来影响集群性能。
true
执行与 checksum 相同的检查,并检查分片中的逻辑不一致性,这可能是由于数据在写入时由于故障 RAM 或其他硬件故障而损坏。这些检查需要从磁盘读取整个分片,这需要大量的时间和 IO 带宽,然后对分片内容执行各种检查,这需要大量的时间、CPU 和内存。

动态索引设置

edit

以下是所有与特定索引模块无关的动态索引设置列表:

index.number_of_replicas

每个主分片的副本数量。默认为1。

警告:将其配置为0可能会在节点重启期间导致临时可用性丢失,或在数据损坏情况下导致永久数据丢失。
index.auto_expand_replicas

根据集群中的数据节点数量自动扩展副本数量。设置为用破折号分隔的下限和上限(例如 0-5)或使用 all 作为上限(例如 0-all)。默认为 false(即禁用)。请注意,自动扩展的副本数量仅考虑 分配过滤 规则,但忽略其他分配规则,例如 每个节点的总分片数,这可能导致集群健康状态变为 YELLOW,如果适用的规则阻止了所有副本的分配。

如果上界是 all,那么 分片分配感知cluster.routing.allocation.same_shard.host 在此索引中将被忽略。

index.search.idle.after
分片在多长时间内未收到搜索或获取请求后,被视为搜索空闲。(默认是 30s
index.refresh_interval
执行刷新操作的频率,使最近对索引的更改对搜索可见。默认为 1s。可以设置为 -1 以禁用刷新。如果未明确设置此设置,则至少在 index.search.idle.after 秒内未收到搜索流量的分片将不会收到后台刷新,直到它们收到搜索请求。命中等待刷新的空闲分片的搜索将仅针对该分片触发刷新作为搜索操作的一部分。此行为旨在在默认情况下自动优化批量索引,当没有执行搜索时。为了选择退出此行为,应将显式值 1s 设置为刷新间隔。
index.max_result_window
搜索到此索引的 from + size 的最大值。默认为 10000。搜索请求占用的堆内存和时间是与 from + size 成正比的,这个限制了内存的使用。请参阅 滚动搜索后 以获得更高效的替代方案。
index.max_inner_result_window
内部命中定义和顶部命中聚合对此索引的 from + size 的最大值。默认为 100。内部命中和顶部命中聚合占用与 from + size 成比例的堆内存和时间,此限制了该内存。
index.max_rescore_window
此索引搜索请求中 rescorewindow_size 的最大值。 默认为 index.max_result_window,其默认值为 10000。搜索请求占用与 max(window_size, from + size) 成比例的堆内存和时间,此限制用于限制该内存。
index.max_docvalue_fields_search
查询中允许的最大docvalue_fields数量。 默认为100。Doc-value字段由于可能会导致每个字段每个文档的查找,因此开销较大。
index.max_script_fields
查询中允许的最大script_fields数量。 默认为32
index.max_ngram_diff
NGramTokenizer 和 NGramTokenFilter 中 min_gram 和 max_gram 之间的最大允许差异。 默认为 1
index.max_shingle_diff
shingle token filter 允许的 max_shingle_size 和 min_shingle_size 之间的最大差异。默认为 3
index.max_refresh_listeners
索引中每个分片上可用的最大刷新监听器数量。 这些监听器用于实现 refresh=wait_for
index.analyze.max_token_count
使用_analyze API可以生成的最大令牌数量。 默认为10000
index.highlight.max_analyzed_offset
高亮请求分析的最大字符数。 此设置仅适用于在未使用偏移量或词向量索引的文本上请求高亮显示时。 默认为 1000000
index.max_terms_count
Terms Query 中可以使用的最大词条数。 默认为 65536
index.max_regex_length
regexpprefix查询中可以使用的值的最大长度。 默认为1000
index.query.default_field

(字符串或字符串数组) 通配符 (*) 模式匹配一个或多个字段。以下查询类型默认在这些匹配字段中进行搜索:

默认为 *,它匹配所有符合 term-level queries 条件的字段,但不包括元数据字段。

index.routing.allocation.enable

控制此索引的分片分配。它可以设置为:

  • all (默认) - 允许所有分片的分片分配。
  • primaries - 仅允许主分片的分片分配。
  • new_primaries - 仅允许新创建的主分片的分片分配。
  • none - 不允许任何分片分配。
index.routing.rebalance.enable

启用此索引的分片重新平衡。可以设置为:

  • all (默认) - 允许所有分片的分片重新平衡。
  • primaries - 仅允许主分片的分片重新平衡。
  • replicas - 仅允许副本分片的分片重新平衡。
  • none - 不允许任何分片的分片重新平衡。
index.gc_deletes
已删除文档的版本号保留以供进一步版本化操作的时间长度。 默认为60秒
index.default_pipeline
索引的默认摄取管道。如果设置了默认管道且该管道不存在,索引请求将会失败。可以使用pipeline参数覆盖默认设置。特殊管道名称_none表示不会运行默认的摄取管道。
index.final_pipeline

索引的最终摄取管道。如果设置了最终管道且该管道不存在,索引请求将会失败。 最终管道总是在请求管道(如果指定)和默认管道(如果存在)之后运行。特殊的管道名称_none表示不会运行最终的摄取管道。

您不能使用最终管道来更改_index字段。如果管道尝试更改_index字段,索引请求将会失败。

index.hidden
指示索引是否应默认隐藏。隐藏的索引在使用通配符表达式时默认不会返回。此行为通过使用expand_wildcards参数在每个请求中进行控制。可能的值为truefalse(默认)。

其他索引模块中的设置

edit

其他索引设置在索引模块中可用:

Analysis
定义分析器、分词器、词元过滤器和字符过滤器的设置。
Index shard allocation
控制分片分配到节点的位置、时间和方式。
Mapping
启用或禁用索引的动态映射。
Merging
后台合并过程中对分片合并方式的控制。
Similarities
配置自定义相似度设置以自定义搜索结果的评分方式。
Slowlog
控制如何记录慢查询和获取请求。
Store
配置用于访问分片数据的文件系统类型。
Translog
控制事务日志和后台刷新操作。
History retention
控制索引中操作历史记录的保留。
Indexing pressure
配置索引背压限制。

X-Pack 索引设置

edit
Index lifecycle management
指定索引的生命周期策略和滚动别名。