当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/189113.html

相关文章:

  • Web前端-Vue2+Vue3基础入门到实战项目-Day3(生命周期, 案例-小黑记账清单, 工程化开发入门)
  • 如何在小程序首页设置标题栏文字
  • CPU性能分析--火焰图使用
  • 微服务10-Sentinel中的隔离和降级
  • python实现UI自动化配置谷歌浏览器驱动
  • AI如何帮助Salesforce从业者找工作?
  • 【Vue面试题十七】、你知道vue中key的原理吗?说说你对它的理解
  • 【数据结构】二叉树--堆排序
  • 项目log日志mysql记录,熟悉python的orm框架
  • 【数据结构-字符串 四】【字符串识别】字符串转为整数、比较版本号
  • React 组件传 children 的各种方案
  • 如何在一个传统的html中,引入vueJs并使用vue复制组件?
  • 【轻松玩转MacOS】故障排除篇
  • Linux基本指令(1)
  • 计算机毕业设计选题推荐-springboot 网上手机销售系统
  • 2、vscode c++ 项目配置调试及运行
  • 二叉搜索树的最近公共祖先
  • LuatOS-SOC接口文档(air780E)-- i2c - I2C操作
  • 帝国cms改目录后打不开,帝国cms改目录生成后还是404
  • 计算机毕业设计选什么题目好?springboot智慧养老中心管理系统
  • 创建一个基本的win32窗口
  • 如何在 Spring Boot 中使用 WebSocket
  • ubuntu2023装完显卡驱动和CUDA CUDNN开机只有下划线闪烁
  • MySQL三种安装方法(yum安装、编译安装、二进制安装)
  • 《视觉 SLAM 十四讲》第 7 讲 视觉里程计1 【如何根据图像 估计 相机运动】【特征点法】
  • 9. 一个SpringBoot项目运行
  • 如何实现chatGPT批量问答,不用token
  • Arduino驱动LIS2DH三轴加速度传感器(惯性测量传感器篇)
  • B 开组会(可持久线段树+树剖) 武汉大学2023年新生程序设计竞赛(同步赛)
  • vue的axios方法