[这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战]
索引模块
索引模块是为每个索引创建的模块,定义了与索引相关的所有配置。我们可以为每个索引的设置配置不同的索引级别,分为两种:
- 静态索引:只能在
创建时或在被关闭的索引上设置 - 动态索引:可对存在的索引在任意进行设置
索引模块的设置分类如下:
静态索引设置
对主分片进行分片
number_of_routing_shards用于设置文档分片的路由参数
- Elasticsearch 在拆分索引时使用此值,该参数是
index.number_of_shards的整数倍; - 此设置的默认值取决于索引中的主分片数量,默认设置允许分片时按
2的因子最多拆分成1024个分片。
index.number_of_shards用于设置索引的主分片数
- 默认值为1;
- 此设置只能在创建索引时设置,不能在关闭的索引上更改;
- 分片的数量默认最大值为1024,避免分片过多破坏集群的稳定性,可以通过
export ES_JAVA_OPTS="-Des.index.max_number_of_shards=128"修改该限制。
路由公式:
routing_factor = num_routing_shards / num_primary_shards 3=30/3
shard_num = (hash(_routing) % num_routing_shards) / routing_factor (0~9)=(0~29)/3
公式取值:
num_primary_shards取值是index.number_of_shards的值num_routing_shards取值是number_of_routing_shards的值- 默认
_routing值是文档的_id,也可以为 每个文档设置routing指定自定义值来实现
通过这个路由公式,可以对主分片进行扩展。图解如下
自定义路由
添加自定义路由:
PUT my-index-000001/_doc/1?routing=user1&refresh=true
{
"title": "This is a document"
}
GET my-index-000001/_doc/1?routing=user1
路由结果:
_id不能保证索引中所有分片的唯一性 。事实上,_id如果使用不同的_routing值进行索引,具有相同的文档可能最终会出现在不同的分片上;需要由用户设置适合的参数保证ID的唯一性。
设置路由参数为必须项:
POST my-index-000002
{
"mappings": {
"_routing": {
"required": true
}
}
}
PUT my-index-000002/_doc/1?routing=user1&refresh=true
{
"title": "This is a document2"
}
GET my-index-000002/_doc/1?routing=user1
设置索引的_routing属性为true,如果增删改查不使用routing参数,则会报routing_missing_exception异常。
index.routing_partition_size自定义路由值可以到达的分片数,默认为 1;且只能在创建索引时设置。
当设置该参数后,计算公式发生了变化:
routing_value = hash(_routing) + hash(_id) % routing_partition_size
shard_num = (routing_value % num_routing_shards) / routing_factor
在 Elasticsearch 7.0.0 及更高版本中,此设置会影响文档在分片之间的分布方式。使用自定义路由重新索引旧索引时,必须明确设置
index.number_of_routing_shards以保持相同的文档分布
其它
- 压缩
index.codec用于设置数据压缩类型,默认值使用 LZ4 压缩来压缩存储的数据,可以设置为Deflate获得更高的压缩率,但会降低存储字段的性能。如果正在更新压缩类型,则将在合并段后应用新的压缩类型。可以使用force merge强制合并分段。
在计算方面,Deflate是一种无损数据的文件压缩格式,结合了LZSS和霍夫曼编码。它是由Phil Katz为他的PKZIP压缩工具的第 2 版设计的。
- 软删除
index.soft_deletes.enabled在7.6.0 中已弃用。创建禁用软删除的索引已被弃用,并将在未来的 Elasticsearch 版本中删除。软删除只能在创建索引时配置。
index.soft_deletes.retention_lease.period设置分片的历史记录保留时间,确保在合并 Lucene 索引期间保留软删除,默认为12h。
- 其它
index.load_fixed_bitset_filters_eagerly 定义是否为嵌套查询预加载缓存过滤器。可能的值为true(默认)和false。
Elasticsearch 会在分片生命周期的各个时间点自动对分片的内容进行完整性检查。index.shard.check_on_startup设置确定 Elasticsearch 在打开分片时是否执行额外的完整性检查。如果这些检查检测到损坏,则它们将阻止打开分片。 相关的取值如下:
| 取值 | |
|---|---|
| false | 打开分片时不要执行额外的损坏检查,这是默认和推荐的行为 |
| checksum | 验证分片中每个文件的校验和是否与其内容匹配 |
| true | 检查物理损坏和逻辑损坏。这是一个昂贵的操作,很耗 CPU 和内存 |
| 这个选项已经被废弃,在 7.0 以后被永久移除 |
动态索引设置
动态索引的设置可以使用update-index-settings API在实时索引上更改它们。
| 标题 | |
|---|---|
index.number_of_replicas | 每个主分片具有的副本数,默认为 1 |
| index.auto_expand_replicas | 根据集群中的数据节点数量自动扩展副本数量,默认为false |
| index.search.idle.after | 分片在被视为搜索空闲之前无法接收搜索或获取请求的时间。(默认为30s) |
| index.refresh_interval | 执行刷新操作的频率;默认为1s. 可以设置-1为禁用刷新 |
| index.max_result_window | from + size搜索此索引 的最大值,from表示起始数据的序号,size表示数据数。默认为 10000,太小可能导致Result window is too large |
| index.max_inner_result_window | 限制返回 结果中的 结果集,默认为100 |
| index.max_rescore_window | docvalue_fields查询中允许 的最大数量 |
| index.max_docvalue_fields_search | script_fields查询中允许 的最大数量,默认为32 |
| index.max_script_fields | script_fields查询中允许 的最大数量,默认为32 |
| index.max_ngram_diff | NGram令牌生成器中的max_gram和min_gram之差必须小于或等于max_script_fields |
| index.max_shingle_diff | shingle令牌过滤器的 max_shingle_size 和 min_shingle_size 之间的最大允许差异,默认为 3 |
| index.max_refresh_listeners | 索引的每个分片上可用的最大刷新侦听器数 |
| index.analyze.max_token_count | 可使用 _analyze API 生成的最大令牌数,默认为10000 |
| index.highlight.max_analyzed_offset | 将为突出显示请求分析的最大字符数 |
| index.max_terms_count | Terms查询中可以使用的最大术语数,默认为65536 |
| index.max_regex_length | 可以在 Regexp Query 中使用的 regex 的最大长度,默认为1000 |
| 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 | 索引 的默认摄取节点管道 |
| index.final_pipeline | 最终管道 |
| index.mapping.dimension_fields.limit | 索引的最大时间序列维度数(仅供 Elastic 内部使用) |
| index.hidden | 指示默认情况下是否应隐藏索引,默认不隐藏 |
其他索引设置
在索引模块中可用的其它索引设置:
- 分析
- 用于定义分析器、标记器、标记过滤器和字符过滤器的设置。
- 索引分片分配
- 控制分片在何处、何时以及如何分配给节点。
- 映射
- 启用或禁用索引的动态映射。
- 合并
- 控制后台合并过程如何合并分片。
- 相似之处
- 配置自定义相似性设置以自定义搜索结果的评分方式。
- 慢日志
- 控制记录查询和获取请求的速度。
- 存储
- 配置用于访问分片数据的文件系统类型。
- 跨日志
- 控制事务日志和后台刷新操作。
- 历史保留
- 控制对索引中操作历史记录的保留。
- 负载压力
- 配置负载限制。