索引模块

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

索引设置

可以为每个索引设置索引级的设置。设置如下:

  • 静态设置

只能在索引创建时,或者关闭的索引上设置。

  • 动态设置

可以通过更新索引 API 在活动的索引上修改。

!> 在关闭的索引上修改静态或动态索引设置,可能会导致不正确的设置。如果不删除并重建索引,是无法修正这些设置。

静态索引设置

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

  • index.number_of_shards

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

?> 每个分片数量限定为 1,024。这是一个安全限定,以防止意外创建索引,而这些索引会由于资源分配而破坏集群的稳定性。这个限定可以通过指定 export ES_JAVA_OPTS="-Des.index.max_number_of_shards=128" 系统属性来修改,这个属性属于集群的每个节点。

  • index.number_of_routing_shards

用于拆分索引的路由分片数。 例如,number_of_routing_shards 设置为 305 x 3 x 2)的 5 分片索引,可以除以因子 23。换言之,可以按以下方式拆分:

  • 51030 (除以 2, 再除以 3)
  • 51530 (除以 3, 再除以 2)
  • 530 (除以 6)

这个设置的默认值基于索引的主分片数。默认情况下,允许按 2 的因子拆分最多 1,024 个分片。

?> 在 Elasticsearch 7.0.0 以及更新的版本,这个设置影响文档在分片中的分布方式。使用自定义路由重新索引旧索引时,你必须显式设置 index.number_of_routing_shards 以维持相同的文档分布。参阅相关的碎裂变化

  • index.shard.check_on_startup

在打开之前是否应该检查分片是否损坏。当检测到损坏时,它将阻止打开分片,允许的值:

  1. - `false`
  2. (默认值)当打开分片时不检测损坏。
  3. - `checksum`
  4. 检测物理损坏。
  5. - `true`
  6. 检测物理和逻辑损坏。这会消耗更高的 CPU 和内存。

!> 仅限专家。在大型索引上检查分片可能花费更多的时间。

  • index.codec default 值使用 LZ4 压缩来压缩存储的数据,但可以设置为 best_compression,即使用 DEFLATE 来获得更高的压缩比,但会降低存储字段的性能。如果要更新压缩类型,合并段后将应用新的压缩类型。段合并可以使用强制合并来强制合并。

  • index.routing_partition_size

自定义路由值可以转到的分片数。默认为 1,只能在索引创建时设置。此值必须小于 index.number_of_shards,除非 index.number_of_shards 值也是 1。参阅路由到索引分区,获取如何使用此设置的更多信息。

  • index.soft_deletes.enabled

标示索引是否允许软删除。软删除只能在索引创建时设置,也只能配置在 Elasticsearch 6.5.0 及后续版本创建的索引上。默认为 true。(7.6.0版本就不推荐,不推荐禁用软删除创建索引,并在未来版本移除此设置)

  • index.soft_deletes.retention_lease.period

分片历史保持租约在它被认为过期前的最大周期。分片历史保留租约,确保在 Lucene 索引上进行合并时保留软删除。如果软删除在可以复制到跟随者之前被合并,由于领导者的历史记录不完整,后续过程将失败。默认为 12h

  • index.load_fixed_bitset_filters_eagerly

标示是否为嵌套查询预加载缓存过滤器。可能值为 true(默认值)和 false

  • index.hidden

标示默认情况下,索引是否应该隐藏。当使用通配符表达式时,隐藏索引默认不会返回。通过 expand_wildcards 参数,每个请求都可以控制此行为。可能的值为 truefalse(默认值)。

动态索引设置

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

  • index.number_of_replicas

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

  • index.auto_expand_replicas

根据集群中数据节点的数量,自动扩展副本的数量。设置为以连接符分隔的下限和上限(如,0-5)或者使用 all 作为上限(如,0-all)。默认为 false(即禁用)。请注意自动扩展的副本数量只考虑分配筛选规则,而忽略其他分配规则,如分片分配感知每个节点分片总数,如果适用规则阻止分配所有副本,则这可能导致集群健康变为 YELLOW(黄色)。

  • index.search.idle.after

在被认为是搜索空闲之前,分片不能接收搜索或获取请求的时间。(默认值为 30s

  • index.refresh_interval

执行刷新操作的频率,它可以使最近对索引的修改对搜索可见。默认为 1s。可以设置为 -1 为禁止刷新。如果这个设置未显示设置,则至少在 index.search.idle.after 秒后,未看到搜索流量的分片在收到搜索请求前不会接收后台刷新。此行为旨在在默认情况下,当不执行搜索时自动优化批量索引。为了选择退出此行为,应将显式值 1s 设置为刷新间隔。

  • index.max_result_window

搜索到此索引的 from + size 的最大值。默认为 10,000。搜索请求占用的堆内存和时间,与 from + size 成比例,这也限制了内存。参阅ScrollSearch After,以获得更有效的替换提高这一点。

  • index.max_inner_result_window

此索引的内部命中定义和顶级命中聚合的 from + size 的最大值。默认为 100。内部命中和顶级命中聚合占用的堆内存和时间,与 from + size 成比例,这也限制了内存。

  • index.max_rescore_window

此索引的搜索中 rescore 请求的 window_size 最大值。默认为 index.max_result_window的值(默认为 10,000)。搜索请求占用的堆内存和时间与 max(window_size, from + size) 成比例,这也限制了内存。

  • index.max_docvalue_fields_search

查询中允许的 docvalue_fields 最大值。默认为 100。文档值字段代价高昂,因为它们可能会导致每个文档查找每个字段。

  • index.max_script_fields

查询中允许的 script_fields 最大值。 默认为 32

  • index.max_ngram_diff

NGramTokenizer 和 NGramTokenFilter的 min_gram 和 max_gram 允许差值。默认为 1

  • 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 的可以生成的最大标记数。默认为 10,000

  • index.highlight.max_analyzed_offset

用于高亮请求的分析的最大字符数。此设置仅用于对文本的高亮请求——此文本被不带偏移量或词语向量索引。默认为 1,000,000

  • index.max_terms_count

用于词语查询(Terms Query)的词语最大值。默认为 65,536

  • index.max_regex_length

用于正则查询(Regexp Query)的正则最大长度。默认为 1,000

  • 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 表明不运行输入管道。

其他索引模块中的设置

索引模块中的其他设置:

设置默认的分析器、分词器、标记过滤器和字符过滤器。

控制分片分配给节点的位置、时间和方式。

允许或禁用索引的动态映射。

控制如何通过后台合并进程合并分片。

配置自定义相似性设置以自定义搜索结果的评分方式。

控制如何记录慢查询和取出请求(fetch query)日志。

配置用于访问分片数据的文件系统类型。

控制事务日志和后台刷新操作。

控制索引操作历史的保留。

配置索引背压限制。

X-Pack 索引设置 [X-Pack]

指定的索引的生命周期策略和翻转别名。

原文链接