Elasticsearch Index Setting一览表

Stella981
• 阅读 867

微信公众号:[中间件兴趣圈]
作者简介:《RocketMQ技术内幕》作者

索引的配置项按是否可以更改分为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_diff
    NGramTokenizer和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 可选值:

  1. all
    所有类型的分片都可以重新分配,默认。

  2. primaries
    只允许分配主分片。

  3. new_primaries
    只允许分配新创建的主分片。

  4. none
    所有的分片都不允许分配。

  • index.routing.rebalance.enable 索引的分片重新平衡机制。可选值如下:
  1. all
    默认值,允许对所有分片进行再平衡。

  2. primaries
    只允许对主分片进行再平衡。

  3. replicas
    只允许对复制分片进行再平衡。

  4. 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: 10s2index.search.slowlog.threshold.query.info: 5s3index.search.slowlog.threshold.query.debug: 2s4index.search.slowlog.threshold.query.trace: 500ms

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

1index.search.slowlog.threshold.fetch.warn: 1s2index.search.slowlog.threshold.fetch.info: 800ms3index.search.slowlog.threshold.fetch.debug: 500ms4index.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时开始计数1112logger.index_search_slowlog_rolling.name = index.search.slowlog13logger.index_search_slowlog_rolling.level = trace14logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling15logger.index_search_slowlog_rolling.additivity = false

Index Show Log

索引慢日志。

1index.indexing.slowlog.threshold.index.warn: 10s2index.indexing.slowlog.threshold.index.info: 5s3index.indexing.slowlog.threshold.index.debug: 2s4index.indexing.slowlog.threshold.index.trace: 500ms5index.indexing.slowlog.level: info6index.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 = 110appender.index_indexing_slowlog_rolling.policies.time.modulate = true1112logger.index_indexing_slowlog.name = index.indexing.slowlog.index13logger.index_indexing_slowlog.level = trace14logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling15logger.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.durability
    translog刷盘方式,可选值:request、async。request,即每请求一次刷盘,也就是客户端发起一个增删改操作时,会在主分片与复制分片全部刷盘成功后,才会返回成功,是ES的默认模式。async:异步刷盘模式,此模式刷盘频率由index.translog.sync_interval设置,其默认值为5s,该模式会存在数据丢失的可能。

  • index.translog.sync_interval
    如果index.translog.durability设置为async,用该值来设置刷盘的频率,默认为5s。

  • index.translog.flush_threshold_size
    es强制刷新的另外一个维度,如果translog的大小达到该值,则强制将未刷盘的数据强制刷新到Lucene中(类比一下关系型数据库的数据文件),默认512mb。

  • index.translog.retention.size
    保存跨日志文件的总大小。也就是一translog日志文件flush后,并不马上删除,而是保留一段时间,但最新的translog文件已存储的内容与待删除的文件的间隔不超过该参数设置的值,默认为512M。

  • index.translog.retention.age
    保存translog文件的最大持续时间,默认为12 h。

关于ES的配置属性就先介绍到这里,后续还会对Analysis、Index Shard Allocation、Similarities这三个模块进行更加详细的说明。


更多文章请关注微信公众号:

Elasticsearch Index Setting一览表


广告:作者的新书《RocketMQ技术内幕》已上市

Elasticsearch Index Setting一览表

《RocketMQ技术内幕》已出版上市,目前可在主流购物平台(京东、天猫等)购买,本书从源码角度深度分析了RocketMQ NameServer、消息发送、消息存储、消息消费、消息过滤、主从同步HA、事务消息;在实战篇重点介绍了RocketMQ运维管理界面与当前支持的39个运维命令;并在附录部分罗列了RocketMQ几乎所有的配置参数。本书得到了RocketMQ创始人、阿里巴巴Messaging开源技术负责人、Linux OpenMessaging 主席的高度认可并作序推荐。目前是国内第一本成体系剖析RocketMQ的书籍。

本文分享自微信公众号 - 中间件兴趣圈(dingwpmz_zjj)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
添砖java的啾 添砖java的啾
3年前
distinct效率更高还是group by效率更高?
目录00结论01distinct的使用02groupby的使用03distinct和groupby原理04推荐groupby的原因00结论先说大致的结论(完整结论在文末):在语义相同,有索引的情况下groupby和distinct都能使用索引,效率相同。在语义相同,无索引的情况下:distinct效率高于groupby。原因是di
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Elasticsearch Index Aliases详解
微信公众号:\中间件兴趣圈\作者简介:《RocketMQ技术内幕》作者;indexaliases,索引别名,有点类似名称映射,一个索引别名可以映射多个真实索引,索引别名在定义时还支持filter,构成同一个索引,不同的视图。思考:一个索引别名可以映射成多个索引,那如果向一个别名添加一个文档时,会在该别名下对应的所有索引下都
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Stella981 Stella981
3年前
ELK学习笔记之ElasticSearch的索引详解
0x00ElasticSearch的索引和MySQL的索引方式对比Elasticsearch是通过Lucene的倒排索引技术实现比关系型数据库更快的过滤。特别是它对多条件的过滤支持非常好,比如年龄在18和30之间,性别为女性这样的组合查询。倒排索引很多地方都有介绍,但是其比关系型
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这