Elasticsearch 通过在后台定期进行段合并来解决这个问题 。小的段被合并到大的段,然后这些大的段再被合并到更大的段 。
段合并的时候会将那些旧的已删除文档从文件系统中清除 。被删除的文档不会被拷贝到新的大段中 。合并的过程中不会中断索引和搜索 。

文章插图
段合并在进行索引和搜索时会自动进行,合并进程选择一小部分大小相似的段,并且在后台将它们合并到更大的段中,这些段既可以是未提交的也可以是已提交的 。
合并结束后老的段会被删除,新的段被 Flush 到磁盘,同时写入一个包含新段且排除旧的和较小的段的新提交点,新的段被打开可以用来搜索 。
段合并的计算量庞大,而且还要吃掉大量磁盘 I/O,段合并会拖累写入速率,如果任其发展会影响搜索性能 。
Elasticsearch 在默认情况下会对合并流程进行资源限制,所以搜索仍然有足够的资源很好地执行 。
性能优化
存储设备磁盘在现代服务器上通常都是瓶颈 。Elasticsearch 重度使用磁盘,你的磁盘能处理的吞吐量越大,你的节点就越稳定 。
这里有一些优化磁盘 I/O 的技巧:
- 使用 SSD 。就像其他地方提过的,他们比机械磁盘优秀多了 。
- 使用 RAID 0 。条带化 RAID 会提高磁盘 I/O,代价显然就是当一块硬盘故障时整个就故障了 。不要使用镜像或者奇偶校验 RAID 因为副本已经提供了这个功能 。
- 另外,使用多块硬盘,并允许 Elasticsearch 通过多个 path.data 目录配置把数据条带化分配到它们上面 。
- 不要使用远程挂载的存储,比如 NFS 或者 SMB/CIFS 。这个引入的延迟对性能来说完全是背道而驰的 。
- 如果你用的是 EC2,当心 EBS 。即便是基于 SSD 的 EBS,通常也比本地实例的存储要慢 。
内部索引优化

文章插图
Elasticsearch 为了能快速找到某个 Term,先将所有的 Term 排个序,然后根据二分法查找 Term,时间复杂度为 logN,就像通过字典查找一样,这就是 Term Dictionary 。
现在再看起来,似乎和传统数据库通过 B-Tree 的方式类似 。但是如果 Term 太多,Term Dictionary 也会很大,放内存不现实,于是有了 Term Index 。
就像字典里的索引页一样,A 开头的有哪些 Term,分别在哪页,可以理解 Term Index是一棵树 。
这棵树不会包含所有的 Term,它包含的是 Term 的一些前缀 。通过 Term Index 可以快速地定位到 Term Dictionary 的某个 Offset,然后从这个位置再往后顺序查找 。
在内存中用 FST 方式压缩 Term Index,FST 以字节的方式存储所有的 Term,这种压缩方式可以有效的缩减存储空间,使得 Term Index 足以放进内存,但这种方式也会导致查找时需要更多的 CPU 资源 。
对于存储在磁盘上的倒排表同样也采用了压缩技术减少存储所占用的空间 。
调整配置参数调整配置参数建议如下:
- 给每个文档指定有序的具有压缩良好的序列模式 ID,避免随机的 UUID-4 这样的 ID,这样的 ID 压缩比很低,会明显拖慢 Lucene 。
- 对于那些不需要聚合和排序的索引字段禁用 Doc values 。Doc Values 是有序的基于
document=>field value的映射列表 。
- 不需要做模糊检索的字段使用 Keyword 类型代替 Text 类型,这样可以避免在建立索引前对这些文本进行分词 。
- 如果你的搜索结果不需要近实时的准确度,考虑把每个索引的
index.refresh_interval改到 30s。
如果你是在做大批量导入,导入期间你可以通过设置这个值为 -1 关掉刷新,还可以通过设置index.number_of_replicas: 0关闭副本 。别忘记在完工的时候重新开启它 。
- 避免深度分页查询建议使用 Scroll 进行分页查询 。普通分页查询时,会创建一个
from+size的空优先队列,每个分片会返回from+size条数据,默认只包含文档 ID 和得分 Score 给协调节点 。
如果有 N 个分片,则协调节点再对(from+size)×n 条数据进行二次排序,然后选择需要被取回的文档 。当 from 很大时,排序过程会变得很沉重,占用 CPU 资源严重 。
- 减少映射字段,只提供需要检索,聚合或排序的字段 。其他字段可存在其他存储设备上,例如 Hbase,在 ES 中得到结果后再去 Hbase 查询这些字段 。
推荐阅读
- 远安黄茶功效禁忌,黄茶的功效与作用及禁忌详解
- 黄茶都有哪几种,详解黄茶和绿茶的区别
- 黄茶的保健功效与作用,黄茶的功效与作用及禁忌详解
- 岳阳黄茶品质特点,详解黄茶特点
- 黄茶的保健功能,黄茶的功效与作用及禁忌详解
- 黄茶具备的品质特点,详解黄茶特点
- 青茶红茶黑茶白茶绿茶黄茶等都有什么区别,详解黄茶和绿茶的区别
- 虎山黄茶的功效与作用及禁忌,黄茶的功效与作用及禁忌详解
- 黄小茶品质特点,详解黄茶特点
- 黄茶的特点与功效及禁忌,黄茶的功效与作用及禁忌详解
