索引模块
编辑索引模块
编辑索引模块是每个索引创建的模块,控制与索引相关的所有方面。
索引设置
编辑- 静态的
- 它们只能在索引创建时或在关闭的索引上设置,或者使用 update-index-settings API 并将
reopen
查询参数设置为true
(这将自动关闭并重新打开受影响的索引)。 - 动态的
- 可以使用 update-index-settings API 在活动索引上更改它们。
您可以在关闭的索引上更改任何已记录的索引设置。但是,不支持在关闭的索引上更改未记录的索引设置,并且可能会导致错误。
静态索引设置
编辑以下是所有与任何特定索引模块无关的静态索引设置的列表
-
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
设置为30
(5 x 2 x 3
)可以按2
或3
的因子拆分。换句话说,它可以按如下方式拆分-
5
→10
→30
(先拆分 2,再拆分 3) -
5
→15
→30
(先拆分 3,再拆分 2) -
5
→30
(拆分 6)
此设置的默认值取决于索引中的主分片数。默认值旨在允许您按 2 的因子拆分,最大可达 1024 个分片。
在 Elasticsearch 7.0.0 及更高版本中,此设置会影响文档在分片中的分布方式。重新索引具有自定义路由的较旧索引时,必须显式设置
index.number_of_routing_shards
以保持相同的文档分布。请参阅相关的重大变更。 -
-
index.codec
default
值使用 LZ4 压缩来压缩存储的数据,但可以将其设置为best_compression
,后者使用 ZSTD 来获得更高的压缩率,但代价是存储字段的读取性能较慢。如果要更新压缩类型,则会在合并段后应用新的压缩类型。可以使用 强制合并 来强制合并段。对索引日志数据集的实验表明,与default
相比,best_compression
可将存储使用率降低高达约 28%,并具有相似的索引吞吐量(有时会略慢或更快,具体取决于其他使用的选项),同时影响按 ID 获取的延迟在 ~10% 和 ~33% 之间。较高的按 ID 获取的延迟对于许多用例(如日志记录或指标)来说并不重要,因为这些用例实际上并不依赖于按 ID 获取的功能(获取 API 或按 _id 搜索)。-
index.mode
-
index.mode
设置用于控制在特定领域(如时间序列数据或日志的摄取)中应用的设置。存在不同的互斥模式,这些模式用于应用控制文档索引、排序和其他参数的设置或默认值,这些参数的值会影响索引或查询性能。resp = client.indices.create( index="my-index-000001", settings={ "index": { "mode": "standard" } }, ) print(resp)
const response = await client.indices.create({ index: "my-index-000001", settings: { index: { mode: "standard", }, }, }); console.log(response);
索引模式支持以下值
-
index.routing_partition_size
- 自定义 路由 值可以转到的分片数。默认为 1,只能在索引创建时设置。除非
index.number_of_routing_shards
值也为 1,否则此值必须小于index.number_of_routing_shards
。有关如何使用此设置的更多详细信息,请参阅 路由到索引分区。
-
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 和内存。
-
动态索引设置
编辑以下是所有与任何特定索引模块无关的动态索引设置的列表
-
index.number_of_replicas
-
每个主分片拥有的副本数。默认为 1。
WARNING: Configuring it to 0 may lead to temporary availability loss during node restarts or permanent data loss in case of data corruption.
-
index.auto_expand_replicas
-
根据集群中的数据节点数自动扩展副本数。设置为用破折号分隔的下限和上限(例如
0-5
),或对上限使用all
(例如0-all
)。默认为false
(即禁用)。请注意,自动扩展的副本数仅考虑 分配过滤规则,但忽略其他分配规则(如 每个节点的总分片数),并且如果适用的规则阻止分配所有副本,则可能导致集群运行状况变为YELLOW
。如果上限为
all
,则此索引将忽略分片分配感知和cluster.routing.allocation.same_shard.host
。
-
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
- 此索引搜索中
rescore
请求的window_size
最大值。默认为index.max_result_window
,它默认为10000
。搜索请求占用堆内存和时间,与max(window_size, from + size)
成正比,此设置限制该内存。 -
index.max_docvalue_fields_search
- 查询中允许的最大
docvalue_fields
数量。默认为100
。文档值字段的成本很高,因为它们可能会导致每个字段每个文档的查找。 -
index.max_script_fields
- 查询中允许的最大
script_fields
数量。默认为32
。
-
index.max_shingle_diff
shingle
词元过滤器的 max_shingle_size 和 min_shingle_size 之间允许的最大差异。默认为3
。-
index.max_refresh_listeners
- 索引的每个分片上可用的最大刷新侦听器数量。这些侦听器用于实现
refresh=wait_for
。 -
index.analyze.max_token_count
- 使用 _analyze API 可以生成的最大词元数量。默认为
10000
。
-
index.query.default_field
-
(字符串或字符串数组)与一个或多个字段匹配的通配符 (
*
) 模式。以下查询类型默认搜索这些匹配字段默认为
*
,它匹配所有符合词条级查询条件的字段,不包括元数据字段。
-
index.routing.allocation.enable
-
控制此索引的分片分配。它可以设置为
-
all
(默认)- 允许所有分片的分片分配。 -
primaries
- 仅允许主分片的分片分配。 -
new_primaries
- 仅允许新创建的主分片的分片分配。 -
none
- 不允许分片分配。
-
-
index.routing.rebalance.enable
-
为此索引启用分片重新平衡。它可以设置为
-
all
(默认)- 允许所有分片的分片重新平衡。 -
primaries
- 仅允许主分片的分片重新平衡。 -
replicas
- 仅允许副本分片的分片重新平衡。 -
none
- 不允许分片重新平衡。
-
-
index.gc_deletes
- 已删除文档的版本号在可用于进一步的版本化操作之前保留的时间长度。默认为
60s
。
-
index.default_pipeline
- 索引的默认摄取管道。如果设置了默认管道但该管道不存在,则索引请求将失败。可以使用
pipeline
参数覆盖默认管道。特殊的管道名称_none
表示不会运行默认的摄取管道。
-
index.final_pipeline
-
索引的最终摄取管道。如果设置了最终管道但该管道不存在,则索引请求将失败。最终管道始终在请求管道(如果指定)和默认管道(如果存在)之后运行。特殊的管道名称
_none
表示不会运行最终的摄取管道。您不能使用最终管道更改
_index
字段。如果管道尝试更改_index
字段,则索引请求将失败。 -
index.hidden
- 指示默认情况下是否应隐藏索引。使用通配符表达式时,默认情况下不会返回隐藏索引。此行为通过使用
expand_wildcards
参数进行每个请求的控制。可能的值为true
和false
(默认)。
其他索引模块中的设置
编辑其他索引设置在索引模块中可用
X-Pack 索引设置
编辑- 索引生命周期管理
- 指定索引的生命周期策略和滚动别名。