ES中个别字段属性说明

DEFAULT_NO_CFS_RATIO

DEFAULT_NO_CFS_RATIO这个用于判断生成新段的时候,是否使用复合文件, 复合文件(Compound File)是将多个索引文件合并为一个单一的文件组合,以减少文件数量和提高性能。

​ 在 Lucene 中,复合文件主要由两个部分组成:

.cfs: 它包含多种索引文件(比如nvd,fdt,dvm等)的内容。

.cfe: 它则主要记录了每种索引文件在cfs中的offset和length信息,方便快速定位到具体的内容。

DEFAULT_NO_CFS_RATIO 默认为0.1, 如果合并段的大小小于或者等于 DEFAULT_NO_CFS_RATIO * 所有段的总大小,那么就使用复合文件,否则就不使用。

MERGE_TYPE 合并类型

​ 1、NATURAL。是正常索引维护过程(文档增删改查)中,根据合并策略自动触发的 merge。

​ 2、FORCE_MERGE_DELETES。只对那些包含了删除文档(占10%,由变量forceMergeDeletesPctAllowed控制 )的段进行合并。当 ES 调用forcemerge 指定only_expunge_deletes, 则会进行这种类型的merge。

​ 3、FORCE_MERGE。实际上在 lucene 中没有地方使用到这个枚举值,ES 源码中也没有。

其他属性

**maxMergeAtOnce。**在NATURAL情况下,同时合并的最大段数,默认10

**maxMergedSegmentBytes。**在NATURAL情况下,最大允许生产的合并后段的大小,默认5G

**maxMergeAtOnceExplicit。**在forcemerge和forcemergeDeletes情况下,同时合并的最大段数,默认无限。

**floorSegmentBytes。**段大小小于这个floorSegmentBytes大小,则都认定他们的SegmentSize都是这个大小, 默认2M

**segsPerTier。**这个越少会带来更多的合并,设置每层需要包含segsPerTier个段才被允许合并, 默认为10

**deletesPctAllowed。**表示允许索引中的删除文档占总文档数的最大百分比。较低的值会使索引更加节省空间,但可能会增加 CPU 和 I/O 活动。默认值是 33。

段合并流程

​ 在org.apache.lucene.index.TieredMergePolicy#findMerges 中实现的

1)初始化。

​ 先获取正在合并的段列表,通过调用 getSortedBySegmentSize 方法,根据段的大小从大到小对 infos 中的段进行排序,得到排序后的列表 sortedInfos。

2)统计合并信息和过滤。

​ 遍历统计 sortedInfos 中的段中的信息:

    1. 如果段正在合并,则将其大小累加到 mergingBytes 中,并从列表中移除,同时更新 totalMaxDoc(累计存活的文档数)。
    2. 否则,统计删除文档数和总最大文档数,并更新 minSegmentBytes为当前段大小的最小值。
    3. 累计总索引字节数 totIndexBytes (用于后续分层)。

3)计算删除文档比例。

​ 计算所有段的删除文档的比例,超出这比例的段或者索引一定会被合并。

4)计算索引允许的删除文档数。

​ 根据索引内的删除文档比例和设置的 deletesPctAllowed(默认为 33%)计算出允许的删除文档数 allowedDelCount。

5)移出过大的段。

移除的前提是段的大小大于maxMergedSegmentBytes(默认5G)的一半大小,其次需要满足如下两个条件之一:

    1. 段的删除文档数小于阈值。
    2. 索引的删除文档数小于阈值。

6)不断分层,计算index中允许的segment数。

​ 索引允许的段数为每层的总和,最终和segsPerTier比较去最大值。当计算出的allowedSegCount 大于segsPerTier,就会去判断floorSegmentBytes

    • floorSegmentBytes 太小,会导致allowedSegCount 很大,这会导致存在大量的小段。
    • floorSegmentBytes 太大,会导致合并的段越大,段越少,但是有maxMergedSegmentBytes控制。

7)调用doFineMerges。

总而言之,就是为了得到可以合并的段列表、每次合并的最大段数、索引允许的段数、允许删除的文档数、是否有超出大的合并(合并的字节总数大于maxMergedSegmentBytes),而这些作为参数进而调用doFindMerges函数。

相关推荐
李昊哲小课6 小时前
spark4 集群安装
大数据·hadoop·zookeeper·spark
wuhanzhanhui7 小时前
重塑供应链!2026武汉数字孪生产业展览会亮相,打造工业未来新基石
大数据·人工智能
数智化管理手记8 小时前
智能财务如何减少财务加班?智能财务落地需要哪些工具支撑?
大数据·网络·数据库·数据挖掘·精益工程
A15362559 小时前
国内好用的WMS仓储管理系统有哪些?万里牛WMS深度评测
大数据·数据库·人工智能
码云数智-园园9 小时前
2026主流SaaS小程序搭建平台对比
大数据
Elastic 中国社区官方博客11 小时前
4 个英伟达人工智能任务,1 个 Elasticsearch 接口:嵌入、聊天、completion 和重排序
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai
融智兴科技11 小时前
一张校园卡学生证,如何连接学习、生活与校园管理?
大数据·科技·物联网
Geeys11 小时前
淘宝新店一般要熬几个月?淘宝新店破周期提速实操方案
大数据·人工智能
麦兜和小可的舅舅12 小时前
从原理到实战:Linux 系统性能诊断核心指标全解析及生产系统故障分析复盘
大数据·linux·运维
阿里技术13 小时前
Agent 评测:方法论与体系设计
大数据·人工智能·算法