表属性设置
版本:7.5
这里为什么叫『表的属性设置』,纯个人偏好,觉得好理解,原因:
ES >= 7.0,type 默认 _doc 也只能是 _doc,那么一个 index 就相当于数据库的一张表,在 settings 里面设置的参数是针对整个表的,并非某一个字段,所以叫它表的属性设置。
Index Settings 详情
表的属性设置按是否可更改可分为:
-
(static) 静态
- 创建后不能更改,它们只能在创建索引时或在关闭的索引上设置。
-
(dynamic) 动态
- 创建后,可更改,可以使用 update-index-settings API 动态的在活动索引上更改它们。
WARNING:
更改关闭索引上的静态或动态索引设置可能导致错误的设置,如果不删除和重新创建索引,就无法纠正这些错误。
静态属性设置(static index settings)
下面是与任何特定索引模块无关的所有静态索引设置的列表
属性名/参数名 | 中文名 | 值类型 | 默认值 | 说明 |
---|---|---|---|---|
index.number_of_shards | 分片数量 | int | 1 | 分片数量,默认 1,些设置只能在创建时设置。它不能在封闭(关闭)索引上更改。每个索引分片数量限制在 1024 个。这个限制是一个安全限制,用于防止由于资源分配而意外创建可能破坏集群稳定的索引,可以通过 export ES_JAVA_OPTS="-Des.index.max_number_of_shards=128" 来修改这个限制 |
index.shard.check_on_startup | 是否检查分片 | bool、checksum | false | 分片在打开之前是否检查分片是否损坏,当检查到损坏时,它将阻止分片被打开,可选值: false (默认)打开碎片时不检查是否损坏 checksum 只检查物理损坏 true 检查物理和逻辑损坏,相对比较耗CPU与内存。专家。在大型索引中,检查碎片可能会花费大量时间,不建议开启。 |
index.codec | 数据储存的压缩算法 | string | LZ4 | 数据存储的压缩算法,默认值为 LZ4,可选择值 best_compression ,比 LZ4 可以获得更好的压缩比(即占据较小的磁盘空间,但存储性能比 LZ4 低)。 |
index.routing_partition_size | 路由分区数 | int | 1 | 默认 1,只能在创建时设置。这个值必须小于索引,除非 index.number_of_shards 的值也是 1,其路由算法为:(hash(_routing) + hash(_id) % index.routing_parttion_size ) % number_of_shards。如果该值不设置,则路由算法为 hash(_routing) % number_of_shardings,_routing 默认值为 _id。更多 详情 |
index.load_fixed_bitset_filters_eagerly | bool | true | 指示缓存的筛选器是否为嵌套查询预加载。(bool),默认值:true。最重要的一点,过滤器所处理的查询部分不需要计算文档得分。在1.4版本以后,执行嵌套查询时所使用的 bitsets 默认提前加载就好了。这样做可以使查询更快但更耗费内存。可以通过 index.load_fixed_bitset_filters_eagerl 配置项为 false 来禁用提前加载 |
动态属性设置(Dynamic index settings)
下面是所有动态索引设置的列表,不与任何特定的索引模块相关联:
属性名/参数名 | 中文名 | 值类型 | 默认值 | 说明 |
---|---|---|---|---|
index.number_of_replicas | 副本 | int | 1 | 每个分片的副本数量,默认 1,推荐 3-5 |
index.auto_expand_replicas | 副本是否自动扩展 | bool、string | false | 副本是否自动扩展,设置为以破折号分隔的下界和上界(例如0-5),或将all用于上界(例如0-all)。默认为 false (即禁用) 。注意:自动扩展的副本数量没有考虑任何其他分配规则,比如分片分配感知、过滤或每个节点的分片总数,如果适用的规则阻止分配所有副本,则可能导致集群健康状态变为黄色。 |
index.search.idle.after | string | 30s (30 秒) | 设置分片多久没有接收过请求,就会被判定为空闲的时间,默认为30秒。 | |
index.refresh_interval | 刷新频率 | string | 1s (1秒) | 执行刷新操作的频率,该操作使索引的最近更改对搜索可见, 默认为1秒, 可以设置为-1表示禁用刷新。 如果显示不设置该值,那些在至少${index.search.idle.after}秒之前没有收到过搜索请求的分片,将不会收到后台的刷新请求,一直要等这些分片收到搜索才会收到后台的刷新请求,如果当前搜索涉及到操作空闲状态的分片时,刷新操作会被挂起直到下一次后台的刷新操作(1秒之内),此行为旨在在未执行搜索时自动优化默认情况下的批量索引。如果不希望执行此默认逻辑,应当显示的将刷新时间间隔设置为1秒。 |
index.max_result_window | int | 10000 | 控制分页搜索总记录数,from + size 的大小不能超过该值,默认为10000。防止占用过高的内存 | |
index.max_inner_result_window | int | 100 | 从from+ size的最大值,用于控制top aggregations(顶部聚合),默认为100。内部命中和顶部命中聚合占用堆内存,并且时间与 from + size 成正比,防止占用过高的内存。 | |
index.max_rescore_window | int | 10000 | 设置索引的 rescore 请求的 window_size 的最大值, 默认为与 index.max_result_window 的值相同,默认值为 10000,防止占用过高的内存。 | |
index.max_docvalue_fields_search | int | 100 | 查询中允许的最多 docvalue_fields 数量,默认为 100。doc_value 字段的查询成本很高,因为它们可能会导致对每个字段和每个文档执行搜索。 | |
index.max_script_fields | int | 32 | 查询中允许的最多 script_fields 的数量, 默认为32。 | |
index.max_ngram_diff | int | 1 | NGramTokenizer 和 NGramTokenFilter 的 min_gram 和 max_gram 之间允许的最大差异值,默认为 1。 | |
index.max_shingle_diff | int | 3 | 对于 ShingleTokenFilter, max_shingle_size 和 min_shingle_size 之间允许的最大差异。默认为 3。 | |
index.blocks.read_only | bool | 设置为 true 使索引和索引元数据只读,设置为 false 允许写和元数据更改。 | ||
index.blocks.read_only_allow_delete | bool | 控制索引及其元数据在只读状态下,是否允许执行删除,设置 true 表示允许删除,false 不允许 | ||
index.blocks.read | bool | 是否禁用对索引数据的读操作 | ||
index.blocks.write | bool | 是否禁用对索引的数据写操作。设置为 true 可禁用针对索引的数据写操作。与 read_only 不同,此设置不影响元数据。例如,可以用写块(blocks.write)关闭索引,但不能用 read_only 块关闭索引。 | ||
index.blocks.metadata | bool | 是否禁用对索引元数据的读写。设置为true可禁用索引元数据的读写。 | ||
index.max_refresh_listeners | 索引的每个分片上当刷新索引时最大的可用监听器数量。这些侦听器用于实现 refresh=wait_for。 | |||
index.analyze.max_token_count | int | 10000 | 使用_analyze API可以生成的最大词项数, 默认为10000 | |
index.highlight.max_analyzed_offset | int | 10000 | highlight(高亮) 请求可被分析的最大字符数,此设置仅在 highlight 请求针对没有偏移量或 term vector 的索引文本时才会生效, 默认为 1000000。 | |
index.max_terms_count | int | 65536 | 可在 term 查询中使用的最大 term 数,默认值为 65536。 | |
index.max_regex_length | int | 1000 | 可在 Regexp 查询(正则查询)中使用的正则表达式的最大长度。默认为 1000。 | |
index.routing.allocation.enable | 控制索引的分片分配 参考 | all、primaries、new_primaries、none | all | Allocation机制,其主要解决的是如何将索引在ES集群中在哪些节点上分配分片(例如在Node1是创建的主分片,在其他节点上创建复制分片)。举个例子,如果集群中新增加了一个节点,集群的节点由原来的3个变成了4 可选值: all 所有类型的分片都可以重新分配,默认。 primaries 只允许分配主分片。 new_primaries 只允许分配新创建的主分片 none 所有的分片都不允许分配。 |
index.routing.rebalance.enable | 索引的分片重新平衡机制 参考 | all、primaries、replicas、none | all | all 是可以对所有的分片进行平衡;primaries 表示只能对主分片进行平衡;replicas 表示只能对副本进行平衡;none 表示对任何分片都不能平衡,也就是禁用了平衡功能。该值一般不需要修改 |
index.gc_deletes | string | 60s (60秒) | 文档删除后(删除后版本号)还可以存活的周期,默认为 60s。 | |
index.default_pipeline | 默认管道聚合器,设置此索引的默认接收节点管道(The default ingest node pipeline),如果设置了默认管道但管道不存在,此索引请求将失败。可以使用pipeline参数覆盖默认值,名为“_none”的特殊pipeline不执行摄取管道。 | |||
index.required_pipeline | 必要管道聚合器,此索引所需的摄取节点管道。如果设置了所需的管道且管道不存在,则索引请求将失败。无法使用管道参数覆盖所需的管道。不能同时设置默认管道和必需管道。特殊管道名称_none表示不会运行摄取管道。 |
写这遍文章主要参考的 ES 官网文档,同时也查找不少资料进行横向比较,看了不少的博客,比较多,在这里就不列举了。
本作品采用《CC 协议》,转载必须注明作者和本文链接
我觉得学习ES 要跳出 mysql 的 概念
@CrazyZard 这只是手段不是目的。
要以何种概念去理解,要看是以什么为参考或者以什么方法去抽象它。
你觉得以何种概念理解,更合适 ES,以及原因? 有兴趣可交流下
@CrazyZard
这是通过不同点来认识。但是只要不是同一个,那么它们就有不同点,如果按不同点来认识,那么这是不成立滴,也是没有意义的,原因: 一亿个人,一亿个都有不同,无解
概念
但是通过共同点来,就不一样了,如:
例1:
例2:
很多公司招IT人员,更喜爱计算机专业的原因,就在于,他们可以通过计算机原理方面快速(具有夸计算机语言的能力)入手。而非计算机专业或这方面知识不足的,这方面的能力就比他们欠缺,当然计算机专业的也有划水滴,非计算机专业的也有高手。