百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

ES-索引配置(Index Setting)(es索引数量限制)

toyiye 2024-08-16 05:25 12 浏览 0 评论

索引的配置项按是否可以更改分为static属性与动态配置,所谓的静态配置即索引创建后不能修改。

索引静态配置

  • index.number_of_shards索引分片的数量。在ES层面可以通过es.index.max_number_of_shards属性设置索引最大的分片数,默认为1024,index.number_of_shards的默认值为Math.min(es.index.max_number_of_shards,5),故通常默认值为5。
  • index.shard.check_on_startup分片在打开之前是否应该检查该分片是否损坏。当检测到损坏时,它将阻止分片被打开。可选值:false:不检测;checksum:只检查物理结构;true:检查物理和逻辑损坏,相对比较耗CPU;fix:类同与false,7.0版本后将废弃。默认值:false。
  • index.codec数据存储的压缩算法,默认值为LZ4,可选择值best_compression ,比LZ4可以获得更好的压缩比(即占据较小的磁盘空间,但存储性能比LZ4低)。
  • index.routing_partition_size路由分区数,如果设置了该参数,其路由算法为:(hash(_routing) + hash(_id) % index.routing_parttion_size ) % number_of_shards。如果该值不设置,则路由算法为 hash(_routing) % number_of_shardings,_routing默认值为_id。

索引动态配置

  • index.number_of_replicas索引复制分片的个数,默认值1,该值必须大于等于0,索引创建后该值可以变更。
  • index.auto_expand_replicas副本数是否自动扩展,可设置(e.g0-5)或(0-all)。
  • index.refresh_interval执行刷新操作的频率,该操作使对索引的最新更改对搜索可见。默认为1s。可以设置为-1以禁用刷新。
  • index.max_result_window控制分页搜索总记录数,from + size的大小不能超过该值,默认为10000。
  • index.max_inner_result_window从from+ size的最大值,用于控制top aggregations,默认为100。内部命中和顶部命中聚合占用堆内存,并且时间与 from + size成正比,这限制了内存。
  • index.max_rescore_window在rescore的搜索中,rescore请求的window_size的最大值。
  • index.max_docvalue_fields_search一次查询最多包含开启doc_values字段的个数,默认为100。
  • index.max_script_fields查询中允许的最大script_fields数量。默认为32。
  • index.max_ngram_diffNGramTokenizer和NGramTokenFilter的min_gram和max_gram之间允许的最大差异。默认为1。
  • index.max_shingle_diff对于ShingleTokenFilter, max_shingle_size和min_shingle_size之间允许的最大差异。默认为3。
  • index.blocks.read_only索引数据、索引元数据是否只读,如果设置为true,则不能修改索引数据,也不能修改索引元数据。
  • index.blocks.read_only_allow_delete与index.blocks.read_only基本类似,唯一的区别是允许删除动作。
  • index.blocks.read设置为true以禁用对索引数据的读取操作。
  • index.blocks.write设置为true以禁用对索引数据的写操作。(针对索引数据,而不是索引元数据)
  • index.blocks.metadata设置为true,表示不允许对索引元数据进行读与写。
  • index.max_refresh_listeners索引的每个分片上当刷新索引时最大的可用监听器数量。这些侦听器用于实现refresh=wait_for。
  • index.highlight.max_analyzed_offset高亮显示请求分析的最大字符数。此设置仅适用于在没有偏移量或term vectors的文本字段时。默认情况下,该设置在6中未设置。x,默认值为-1。
  • index.max_terms_count可以在terms查询中使用的术语的最大数量。默认为65536。
  • index.routing.allocation.enable Allocation机制,其主要解决的是如何将索引在ES集群中在哪些节点上分配分片(例如在Node1是创建的主分片,在其他节点上创建复制分片)。举个例子,如果集群中新增加了一个节点,集群的节点由原来的3个变成了4 可选值:
  • all所有类型的分片都可以重新分配,默认。
  • primaries只允许分配主分片。
  • new_primaries只允许分配新创建的主分片。
  • none所有的分片都不允许分配。
  • index.routing.rebalance.enable 索引的分片重新平衡机制。可选值如下:
  • all默认值,允许对所有分片进行再平衡。
  • primaries只允许对主分片进行再平衡。
  • replicas只允许对复制分片进行再平衡。
  • none不允许对任何分片进行再平衡
  • index.gc_deletes文档删除后(删除后版本号)还可以存活的周期,默认为60s。
  • index.max_regex_length用于正在表达式查询(regex query)正在表达式长度,默认为1000。
  • index.default_pipeline默认的管道聚合器。

Analysis

分析模块相关配置参数,将在后续分析模块部分介绍。

Index Shard Allocation

索引分片分配相关参数。这部分内容将在Cluster(集群模块详细介绍)。

Mapping

字段映射相关参数,详情请参考:Elasticsearch Mapping parameters(主要参数一览)

Merging

后台分片合并进程相关配置参数。

  • index.merge.scheduler.max_thread_count用于单个分片节点合并的最大线程数量,默认值为:Math.max(1, Math.min(4, Runtime.getRuntime().availableProcessors() / 2)),如果是非SSD盘,该值建议设置为1。

Similarities

相似性相关配置,这个后续可能会以专题介绍,暂不深究。

Show Log

慢查询日志相关配置。

Search Show Log

首先ES提供在查询阶段(query)和数据获取阶段(fetch)设置阔值,超过该阔值则记录日志。支持如下参数:

1index.search.slowlog.threshold.query.warn: 10s
2index.search.slowlog.threshold.query.info: 5s
3index.search.slowlog.threshold.query.debug: 2s
4index.search.slowlog.threshold.query.trace: 500ms

上述参数定义查询阶段的阔值,分别表示,如果执行时间超过10s,打出警告日志,超过5s输出info级别日志。

1index.search.slowlog.threshold.fetch.warn: 1s
2index.search.slowlog.threshold.fetch.info: 800ms
3index.search.slowlog.threshold.fetch.debug: 500ms
4index.search.slowlog.threshold.fetch.trace: 200ms

上述参数定义查询获取数据(fetch)的阔值,分别表示,如果执行时间超过1s,打出警告日志,超过800ms输出info级别日志。

index.search.slowlog.level: info定义日志输出级别为info,也就是hdebug,trace级别的日志不输出。

注意:上述日志级别为分片级日志。

上述参数定义了日志输出级别,那接下来还需要在log4j文件中定义日志输出器,日志输出文件路径等,其相关配置如下:

 1appender.index_search_slowlog_rolling.type = RollingFile
 2appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling
 3appender.index_search_slowlog_rolling.fileName = ${sys:es.logs}_index_search_slowlog.log
 4appender.index_search_slowlog_rolling.layout.type = PatternLayout
 5appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] [%node_name]%marker %.10000m%n
 6appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs}_index_search_slowlog-%d{yyyy-MM-dd}.log
 7appender.index_search_slowlog_rolling.policies.type = Policies    // 文件切割方案,属于log4j的语法
 8appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy  // 基于时间切割,log4j还支持按大小切割,其类为SizeBasedTriggeringPolicy。
 9appender.index_search_slowlog_rolling.policies.time.interval = 1                                       // 1小时切割成一个文件
10appender.index_search_slowlog_rolling.policies.time.modulate = true                               //  是否修正时间范围, 如果设置为true,则从0时开始计数
11
12logger.index_search_slowlog_rolling.name = index.search.slowlog
13logger.index_search_slowlog_rolling.level = trace
14logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling
15logger.index_search_slowlog_rolling.additivity = false

Index Show Log

索引慢日志。

1index.indexing.slowlog.threshold.index.warn: 10s
2index.indexing.slowlog.threshold.index.info: 5s
3index.indexing.slowlog.threshold.index.debug: 2s
4index.indexing.slowlog.threshold.index.trace: 500ms
5index.indexing.slowlog.level: info
6index.indexing.slowlog.source: 1000 

index.indexing.slowlog.source参数用来控制记录文档_souce字段字符的个数,默认为1000,表示只记录_souce字段的前1000个字符,可以设置true,表示输出_souce字段全部内容,设置为false,表示不记录_souce字段的内容。

默认情况下,会对_souce字段的输出进行格式化,通常使用一行输出,如果想阻止格式化,可以通过index.indexing.slowlog.reformat设置为false来避免。

同样通过上述属性定义好阔值,接下来将在logg4j配置文件中定义日志的输出。

 1appender.index_indexing_slowlog_rolling.type = RollingFile
 2appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling
 3appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs}_index_indexing_slowlog.log
 4appender.index_indexing_slowlog_rolling.layout.type = PatternLayout
 5appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] [%node_name]%marker %.-10000m%n
 6appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs}_index_indexing_slowlog-%d{yyyy-MM-dd}.log
 7appender.index_indexing_slowlog_rolling.policies.type = Policies
 8appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
 9appender.index_indexing_slowlog_rolling.policies.time.interval = 1
10appender.index_indexing_slowlog_rolling.policies.time.modulate = true
11
12logger.index_indexing_slowlog.name = index.indexing.slowlog.index
13logger.index_indexing_slowlog.level = trace
14logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling
15logger.index_indexing_slowlog.additivity = false

store

存储模块,其主要参数为:index.store.type,表示存储类型,该参数为静态参数,在索引创建时指定,无法更改。其可选值:

  • fs默认文件系统实现,根据当前操作系统选择最佳存储方式。
  • simplefs简单的FS类型,使用随机访问文件实现文件系统存储(映射到Lucene SimpleFsDirectory)。并发性能很差(多线程会出现瓶颈)。当需要索引持久性时,通常最好使用niofs。
  • niofs基于NIOS实现的文件系统,该类型使用NIO在文件系统上存储碎片索引(映射到Lucene NIOFSDirectory)。它允许多个线程同时从同一个文件中读取数据。
  • mmapfs基于文件内存映射机制实现的文件系统实现,该方式将文件映射到内存(MMap)来存储文件系统上的碎片索引(映射到Lucene MMapDirectory)。内存映射使用进程中与被映射文件大小相同的部分虚拟内存地址空间。可以通过node.store.allow_mmapfs属性来禁用基于内存映射机制,如果节点所在的操作系统没有大量的虚拟内存,则可以使用该属性明确禁止使用该文件实现。

Translog

由于Lucene提交的开销太大,不能每个单独变更就提交(刷写到磁盘),所以每个分片复制都有一个事务日志,称为translog。所有索引(index)和删除(delete)操作都是在被内部Lucene索引处理之后(但在它们被确认之前[返回客户端])写入translog的。在发生崩溃的情况下,当分片恢复时,可以从translog中恢复最近已确认但尚未包含在上一次Lucene提交中的事务。

Translog日志有点类似于关系型数据库mysql的redo日志。

Translog相关配置参数(索引级别):

  • index.translog.durabilitytranslog刷盘方式,可选值:request、async。request,即每请求一次刷盘,也就是客户端发起一个增删改操作时,会在主分片与复制分片全部刷盘成功后,才会返回成功,是ES的默认模式。async:异步刷盘模式,此模式刷盘频率由index.translog.sync_interval设置,其默认值为5s,该模式会存在数据丢失的可能。
  • index.translog.sync_interval如果index.translog.durability设置为async,用该值来设置刷盘的频率,默认为5s。
  • index.translog.flush_threshold_sizees强制刷新的另外一个维度,如果translog的大小达到该值,则强制将未刷盘的数据强制刷新到Lucene中(类比一下关系型数据库的数据文件),默认512mb。
  • index.translog.retention.size保存跨日志文件的总大小。也就是一translog日志文件flush后,并不马上删除,而是保留一段时间,但最新的translog文件已存储的内容与待删除的文件的间隔不超过该参数设置的值,默认为512M。
  • index.translog.retention.age保存translog文件的最大持续时间,默认为12 h。

相关推荐

# Python 3 # Python 3字典Dictionary(1)

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,格式如...

Python第八课:数据类型中的字典及其函数与方法

Python3字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值...

Python中字典详解(python 中字典)

字典是Python中使用键进行索引的重要数据结构。它们是无序的项序列(键值对),这意味着顺序不被保留。键是不可变的。与列表一样,字典的值可以保存异构数据,即整数、浮点、字符串、NaN、布尔值、列表、数...

Python3.9又更新了:dict内置新功能,正式版十月见面

机器之心报道参与:一鸣、JaminPython3.8的热乎劲还没过去,Python就又双叒叕要更新了。近日,3.9版本的第四个alpha版已经开源。从文档中,我们可以看到官方透露的对dic...

Python3 基本数据类型详解(python三种基本数据类型)

文章来源:加米谷大数据Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在Python中,变量就是变量,它没有类型,我们所说的"类型"是变...

一文掌握Python的字典(python字典用法大全)

字典是Python中最强大、最灵活的内置数据结构之一。它们允许存储键值对,从而实现高效的数据检索、操作和组织。本文深入探讨了字典,涵盖了它们的创建、操作和高级用法,以帮助中级Python开发...

超级完整|Python字典详解(python字典的方法或操作)

一、字典概述01字典的格式Python字典是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的每个键值key=>value对用冒号:分割,每个对之间用逗号,...

Python3.9版本新特性:字典合并操作的详细解读

处于测试阶段的Python3.9版本中有一个新特性:我们在使用Python字典时,将能够编写出更可读、更紧凑的代码啦!Python版本你现在使用哪种版本的Python?3.7分?3.5分?还是2.7...

python 自学,字典3(一些例子)(python字典有哪些基本操作)

例子11;如何批量复制字典里的内容2;如何批量修改字典的内容3;如何批量修改字典里某些指定的内容...

Python3.9中的字典合并和更新,几乎影响了所有Python程序员

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

Python3大字典:《Python3自学速查手册.pdf》限时下载中

最近有人会想了,2022了,想学Python晚不晚,学习python有前途吗?IT行业行业薪资高,发展前景好,是很多求职群里严重的香饽饽,而要进入这个高薪行业,也不是那么轻而易举的,拿信工专业的大学生...

python学习——字典(python字典基本操作)

字典Python的字典数据类型是基于hash散列算法实现的,采用键值对(key:value)的形式,根据key的值计算value的地址,具有非常快的查取和插入速度。但它是无序的,包含的元素个数不限,值...

324页清华教授撰写【Python 3 菜鸟查询手册】火了,小白入门字典

如何入门学习python...

Python3.9中的字典合并和更新,了解一下

全文共2837字,预计学习时长9分钟Python3.9正在积极开发,并计划于今年10月发布。2月26日,开发团队发布了alpha4版本。该版本引入了新的合并(|)和更新(|=)运算符,这个新特性几乎...

python3基础之字典(python中字典的基本操作)

字典和列表一样,也是python内置的一种数据结构。字典的结构如下图:列表用中括号[]把元素包起来,而字典是用大括号{}把元素包起来,只不过字典的每一个元素都包含键和值两部分。键和值是一一对应的...

取消回复欢迎 发表评论:

请填写验证码