merge是lucene的底层机制,merge过程会将index中的segment进行合并,生成更大的segment,提高搜索效率。segment是lucene索引的一种存储结构,每个segment都是一部分数据的完整索引,它是lucene每次flush或merge时候形成。每次flush就是将内存中的索引写出一个独立segment的过程。所以随着数据的不断增加,会形成越来越多的segment。因为segment是不可变的,删除操作不会改变segment内部数据,只是会在另外的地方记录某些数据删除,这样可能会导致segment中存在大量无用数据。搜索时,每个segment都需要一个reader来读取里面的数据,大量的segment会严重影响搜索效率。而merge过程,会将小的segment写到一起形成一个大的segment,减少其数量。同时重写过程会抛弃那些已经删除的数据。因此segment的merge是有利于查询效率的。

elasticsearch的merge其实就是lucene的merge机制。merge过程是lucene有一个后台线程,它会根据merge策略来决定是否进行merge,一旦merge的条件满足,就会启动后台merge。merge策略分为两种,这也是大多数大数据框架所采用的,segment的大小和segment中doc的数量。以这两个标准为基础实现了三种merge策略:TieredMergePolicy、LogDocMergePolicy 及LogByteSizeMergePolicy。elasticsearch这一部分就是对这三种合并策略的封装,并提供了对于的配置。它的实现方式如下所示:

底层mergeprovider实现了对三种合并策略的初始化和配置,并通过getMergePolicy()方法对外提供。这三种合并策略中LogDocMergePolicy是根据doc数量进行合并,其它两种都是根据segment的大小,只是TieredMergePolicy合并过程是分层进行,它会把小于某一值的所有segment合并成一个大的segment,然后再一次进行。

以上是合并策略,除了合并策略还有一个要说的就是合并线程。前面说过,merge是通过独立线程完成的,lucene对于线程策略也有两种,一种是顺序,另外一种就是并发。顺序合并策略会阻止索引的进行,因此多数情况先不会使用,而并发合并则是和index过程同时进行,这样不会影响索引和搜索。elasticsearch同样通过provider的形式提供这两种合并线程配置。

总结:merge能够通过减少segment数量来提高搜索速度。但是merge的过程会对索引吞吐量及搜索速度有一定的影响,因此需要配置适当的合并策略参数。对于资源不足的环境,最好禁止自动merge,选择空闲时段手动进行merge。

转载于:https://www.cnblogs.com/zziawanblog/p/6876093.html

elasticsearch index 之merge相关推荐

  1. elasticsearch index 之 put mapping

    elasticsearch index 之 put mapping mapping机制使得elasticsearch索引数据变的更加灵活,近乎于no schema.mapping可以在建立索引时设置, ...

  2. elasticsearch index、create和update的源码分析

    https://segmentfault.com/a/1190000011272749 社区里面有人问了如下一个问题: 执行 bulk 索引文档的时候,用 index 或者 create 类型并且自定 ...

  3. ElasticSearch index 剖析

    ElasticSearch index 剖析 在看ElasticSearch权威指南基础入门中关于:分片内部原理这一小节内容后,大致对ElasticSearch的索引.搜索底层实现有了一个初步的认识. ...

  4. sheet.range(‘U‘ + str(index - 1), ‘U‘ + str(index)).api.merge(),xlwings合并Excel上下相邻单元格,代码中断执行,也不报错。

    一.背景 采用xlwings包,根据template.xlsx模板,导出excel成果内容,包括多个sheet内容的填充,可实现上下相邻单元格的合并(左右单元格合并也是一个道理),代码运行卡着,也不报 ...

  5. Elasticsearch Index Lifecycle Management (ILM)

    0 - 前言 Elastic Stack 6.6版本的发布,带来了很多新功能,比如: Index Lifecycle Management Frozen Index Geoshape based on ...

  6. elasticsearch index doc过程概述

    文章目录 概述 1.es中的基础概念 2.es中的索引过程 2.1 一次index请求的大体流程 2.2 为什么是near real time 2.3 为什么要有translog 2.3.1 tran ...

  7. Go Elasticsearch index CRUD

    文章目录 1.简介 2.增加 2.删除 3.修改 3.1 更新 mapping 3.1.1 增加字段 3.1.2 删除字段 3.1.3 添加 multi-fields 3.2 重命名 index 4. ...

  8. Elasticsearch Index Aliases详解

    index aliases,索引别名,有点类似名称映射,一个索引别名可以映射多个真实索引,索引别名在定义时还支持filter,构成同一个索引,不同的视图. 思考:一个索引别名可以映射成多个索引,那如果 ...

  9. ElasticSearch Index Settings

    目录 Index Settings 静态索引配置 index.number_of_shards index.shard.check_on_startup index.codec index.routi ...

最新文章

  1. 作为程序员,要取得非凡成就需要记住的15件事。
  2. 人工智能的影响调查_调查报告|文科大学生群体对于人工智能影响 就业的认知程度:基于访谈的质性研究...
  3. poi 拆分带图片的word_学会这2招,再多的“表格编号”都能轻松解决!【Word教程】...
  4. java文件不能生成class,一文说清!
  5. 链接服务器---无效的产品名称
  6. 漫谈移动开发中的组件化
  7. java字符转为数字_Java 判断字符串能否转化为数字的三种方法
  8. aswing JTable用法
  9. 【CF1312D】Count the Arrays(计数)
  10. matlab男女声识别,matlab男女声音识别
  11. 8086微型计算机第五章接口,微机原理与接口技术课程论文.doc
  12. asterisk meetme 会议实现
  13. matlabrobert锐化_Matlab图像处理系列3———空间域锐化滤波器
  14. 7-6 打印沙漏 (20 分)
  15. Fetch —— 中止尚未完成的接口请求
  16. linux操作系统基础复习
  17. 设备漏电对计算机影响,机箱漏电会不会影响电脑 机箱漏电会不会烧电脑主机内部硬件吗...
  18. 《Java SE实战指南》22-04:字节流和字符流
  19. 解决 github 报错 Failed to connect to github.com port 443:connection timed out
  20. Vijos P1474雷曼兔(csapc)

热门文章

  1. 100行代码让您学会JavaScript原生的Proxy设计模式
  2. LoadRunner常见问题分析
  3. python程序的书写特点_不一样的Python代码写法,让你写出一手漂亮的代码
  4. 没有内存条电脑能开机吗_电脑没内存条能开机吗?这位朋友说他的电脑没内存条都用几年了!...
  5. 纯ajax html网页,JavaScript – 页面加载纯HTML AJAX网站中的替代品
  6. python封装c++接口_使用MetaSIP自动生成SIP封装C++到Python接口
  7. python集合的操作_Python集合操作方法详解
  8. ipython怎么安装numpy_在TensorFlow教程中安装numpy后仍然无法导入
  9. java序列化_技术干货 | JAVA反序列化漏洞
  10. 长安大学研究生院计算机学院,研究生教育