Lucene随笔-LogMergePolicy

2024-06-19 20:08

本文主要是介绍Lucene随笔-LogMergePolicy,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

lucene版本:6.5.4

当IW索引中的数据发生任何变化时,都会触发merge检测,即找出可以合并的merge的segment集合;并且判断是否需要合并,如果需要合并则返回一组OneMerge,一个OneMerge对应的时一个Segment。**那么如何取获取那些需要合并的段集合呢?**这就是我们本节所要讲的。在Lucene4版本前,其默认的MergePolicy为LogMergePolicy;在此之后变为TieredMergePolicy。本节首先介绍一个LogMergePlolicy。

LogMergePlolicy首先来说时一个抽象类,主要包含了一些默认参数以及基本的函数;其子类主要包含了两个:LogDocMergePolicy与LogByteSizeMergePolicy。这两种规则的侧重点不同:分别为段内文档的数量与段的大小。

合并的相关参数

public static final double LEVEL_LOG_SPAN = 0.75;

Defines the allowed range of log(size) for each level. A level is computed by taking the max segment log size, minus LEVEL_LOG_SPAN, and finding all segments falling within that range

定义了每一个level的范围。

public static final int DEFAULT_MERGE_FACTOR = 10

定义了执行一次merge包含了多少个segnment的默认值。

 public static final int DEFAULT_MAX_MERGE_DOCS = Integer.MAX_VALUE;

如果段的文档数量超过这个值的时后,将不会再被merge(在LogDocMergePolicy里面默认为是1000),这个是默认值。

public static final double DEFAULT_NO_CFS_RATIO = 0.1;

默认值为0.1,如果我们的索引文件设置为复合文件(compound file ),那么.doc、.pos、.fdx等等索引文件在执行段合并后会生成一个复合文件,这个文件可能会很大,所以在合并前会判断将要生成的复合文件的大小是否会超过总的索引文件的10%,如果超过,那么合并后就不会生成复合文件。

protected long minMergeSize

seg最小不能小于这个值,如果小于则取整;为了保证那些超级小的段也能够被合并。在LogByteSizeMergePolicy中默认为1.6MB。

protected long maxMergeSize;

如果seg的大小大于这个值将永远不会被合并。在LogByteSizeMergePolicy中默认为2048MB.

protected boolean calibrateSizeByDeletes = true;

该值描述了是否要标记段中的被删除的文档,如果该值为true,那么被删除的文档的个数或大小不会作为该段的一部分。

Segment的量度

对于LogMergePolicy,lucene有两种实现:LogDocMergePolicy与LogByteSizeMergePolicy

LogDocMergePolicy-文档数量:一个段中的文档数量可以用来描述段的大小,根据calibrateSizeByDeletes的值判断被删除的文档号是否也作为段的大小的一部分,例如LogDocMergePolicy就使用了该方法来计算段的大小
LogByteSizeMergePolicy-索引文件大小:一个段中包含的所有的索引文件大小总和,在Lucene7.5.0版本中除了LogDocMergePolicy,其他的合并策略都使用该方法

流程

触发条件

任何对文档的修改都会触发合并策略。

1. 计算Log值
我的理解是为了进行平滑,如果最小值和最大值相差过大,将可能一直无法满足合并的要求。

log(SegmentSize) / (mergeFactor)

2. 分层
首先获取未处理段集的maxLevel,即上述的值。然后获取levelBottom = maxLevel - LEVEL_LOG_SPAN。则边界就为[maxLevel最右边的边界, maxLevel左边第一个达到levelBottom的seg]。

3. 生成OneMerge

  • 如果当前层内段集数量大于mergeFactor则进行遍历,判断该level内的段是否满足需求(比如段是否超过maxSize)。
    4. 执行合并
    IW开启后台线程进行合并。

这篇关于Lucene随笔-LogMergePolicy的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076020

相关文章

MySQL和Lucene(Elasticsearch)索引对比分析

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 大数据真好玩 点击右侧关注,大数据真好玩! 本文是来自略速互联网笔记的分享。 你可以在这里查看原文:http://www.lvesu.com/?uri=/blog/main/cms-611.html 前言 相比于大多数人熟悉的 MySQL 数据库的索引,Elasti

【 Android 应用开发随笔】-- PackageInstaller.SessionCallback

PackageInstaller.SessionCallback 是 Android 开发中的一个接口,用于在应用程序安装过程中接收安装状态的回调。这个接口属于 android.content.pm.PackageInstaller 类,主要用于处理通过 PackageInstaller 类进行的包安装。 主要功能 ◾ 安装进度通知: PackageInstaller.SessionCal

程序员的自我修养--术语随笔

PLT PLT(Procedure Linkage Table)是用于动态链接共享库中函数调用的一种数据结构,它在程序运行时起着至关重要的作用。下面是对 PLT 的详细解释:作用: PLT 主要用于实现库函数的延迟绑定(dynamic binding)。它负责将程序中对共享库中函数的调用映射到最终的共享库函数的地址上,并且支持共享库的重定位。 实现原理: 当一个程序调用共享库中的函数时,对应的

强化学习实操入门随笔

碎碎念:经过思考,打通底层逻辑,我认为未来ai的功能是在沟通领域代替人,未来人-人模式(媒介是死的语言,比如看古人留下的文字、聊天的暂时不在)会变成人-ai替身-人模式(符合本人想法的“预测个性化语言”)。由于沟通越来越虚拟化和低成本,以及各种模态(比如视频链接)的数字媒介比见面聊天效率更高,所以制作人的各种在虚拟数字空间的“替身”(模仿聊天、总结信息等秘书类事务)是很可能出现的重点问题。

周末随笔 | 笔耕者的悲哀 —— 盗亦无道

欢迎跳转到本文的原文链接:https://honeypps.com/talk/the-thief-has-no-way/ 今天所要说的不是技术,而是盗版这个现象。对于技术公众号来说,很少会写一些技术之外的东西。而且写一些实事类的东西对触碰到一部分人的利益,更有甚者会被“安排”。 对于盗版,我其实已经习惯了,也早已习惯地采取“鸵鸟策略”来应对。不过昨天发生的一件事情确实有点让人寒心。 前天我的

第三章 操作符读书随笔

1、 赋值运算符“=”:     对于基本类型来说,是把基本类型的实际内容赋给了左边的变量。     对于对象类型来说,是把对象的引用赋给了左边的变量。不同的变量可以引用同一个对象的引用,从而指向同一个对象。 2、整数除法“/”     进行除法的时候,只获取整数部分,不会四舍五入。 3、逻辑比较运算符“==”     逻辑等于运算符,比较的是对象的引用,一般情况下会根据equals方

随笔十、音频扩展模块测试

本项测试简单,对购买的音频扩展模块进行录音放音测试 按照使用说明,连接音频小板,一个喇叭一个麦克风,4根线,buildroot系统镜像 录音测试 root@RK356X:/# arecord -c 1 -r 44100 -f S16_LE /tmp/record.wav Recording WAVE '/tmp/record.wav' : Signed 16 bit Little En

随笔1:数学建模与数值计算

目录 1.1 矩阵运算 1.2 基本数学函数 1.3 数值求解 数学建模与数值计算 是将实际问题通过数学公式和模型进行描述,并通过计算获得模型解的过程。这是数学建模中最基本也是最重要的环节之一。下面是详细的知识点讲解及相应的MATLAB代码示例。 1.1 矩阵运算 知识点讲解: 在数学建模中,矩阵运算是非常基础且重要的工具。许多实际问题可以通过矩阵来表示,例如线性方程

2024年8月总结及随笔之逝

1. 回头看 日更坚持了609天。 读《零信任网络:在不可信网络中构建安全系统》更新完成读《软件开发安全之道:概率、设计与实施》开更并持续更新 2023年至2024年8月底累计码字1463007字,累计日均码字2402字。 2024年8月码字109278字,同比增长177.6%,环比增长27.3%,日均码字数3525字,累计码字745044字,累积日均码字3053字。 读完以下这些书

随笔九、SARADC按键程控测试

目录 1. 泰山派环境 2. 按键3分析 3. 编程测试 1. 泰山派环境 泰山派开发板上有3个按键 按键1是电源按键PWRON,实测按几下会导致开发板重启 按键2是复位按键RESET,按下立马复位重启 按键3是升级按键RECOVER,配合RESET按键可以使开发板进入Loader 烧写模式 一般来说开发板都会给用户提供一个用户按键,看样子泰山派用户按键是需要自己用G