Lucene 简介:开源搜索引擎的核心引擎
Lucene 是 Apache 基金会旗下的一款高性能、可伸缩的开源信息检索库,它提供了完整的索引构建、检索和排序功能,是 Elasticsearch、Solr 等主流搜索引擎的底层核心。本文将详细解析 Lucene 的核心概念、索引机制及工作流程。
Lucene 核心概念
Lucene 围绕 “索引” 和 “检索” 构建了一套完整的抽象模型,以下是关键概念:
索引库(Index)
- 定义:Lucene 中,一个目录即一个索引库,目录下的所有文件共同构成一个完整的索引,包含多个文档(Document)。
- 特点:索引库是 Lucene 操作的基本单位,所有文档的索引数据(如倒排索引、词项信息)都存储在该目录中。
- 类比:类似数据库中的 “数据库实例”,一个索引库可对应一个业务场景(如 “商品索引”“文章索引”)。
段(Segment)
段是 Lucene 索引的 “子单元”,一个索引库由多个段组成,每个段是一个独立的、不可修改的索引片段。
核心特性:
- 不可变性:段一旦写入磁盘,就只能读取,不能修改(保证索引稳定性和查询性能)。
- 增删改处理:
- 新增:新文档会生成新段(先写入内存,批量刷盘以减少 IO)。
- 删除:不直接删除段中数据,而是通过
.del文件标记被删除的文档 ID,查询时过滤这些文档(段合并时才真正移除)。 - 修改:等价于 “删除旧文档 + 新增新文档”(旧文档被标记删除,新文档写入新段)。
- 段合并:当段数量过多时,Lucene 会自动合并小段位大段(减少文件句柄占用,提升查询效率)。
延迟写机制:
新增数据先写入内存缓冲区,积累到一定量后批量刷盘生成新段,同时生成提交点(记录已刷盘的段信息)。这一机制减少了磁盘 IO 次数,提升性能。