ES中个别字段属性说明

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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函数。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6