表属性设置

版本: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 协议》,转载必须注明作者和本文链接
光年之外
讨论数量: 3
CrazyZard

我觉得学习ES 要跳出 mysql 的 概念

4年前 评论

@CrazyZard 这只是手段不是目的。
要以何种概念去理解,要看是以什么为参考或者以什么方法去抽象它。
你觉得以何种概念理解,更合适 ES,以及原因? 有兴趣可交流下

4年前 评论
CrazyZard 4年前

@CrazyZard
这是通过不同点来认识。但是只要不是同一个,那么它们就有不同点,如果按不同点来认识,那么这是不成立滴,也是没有意义的,原因: 一亿个人,一亿个都有不同,无解

概念

“中华人民共和国国家标准GB/T15237.1-2000:“概念”是对特征的独特组合而形成的知识单元。德国工业标准2342将概念定义为一个“通过使用抽象化的方式从一事物中提取出来的反映其共同特性的思维单位””。

但是通过共同点来,就不一样了,如:

例1:

  • 1、通过身体结构分类他们都划为人类,要想跟他们认识,不管是1亿个还是1万个,我只需要认识人类,了解人类即可
  • 2、通过不同的语言区分,又可划分为汉语、英文、德语、俄语。我想要认识中国人,学习了解汉语,通过汉语即可认识中国人,不管你是北京人、上海人、广东人、重庆人。

例2:

为了提高查询的速度,unix、linux、nosql、sql 它们都使用的类似的方案通过写缓存刷脏页的方式减少随机 IO,只要了解了 解决减少随机IO的方案,那么 unix、linux、nosql、sql 在减少随机IO 方面的知识不都懂了吗

很多公司招IT人员,更喜爱计算机专业的原因,就在于,他们可以通过计算机原理方面快速(具有夸计算机语言的能力)入手。而非计算机专业或这方面知识不足的,这方面的能力就比他们欠缺,当然计算机专业的也有划水滴,非计算机专业的也有高手。

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!