戴老师的博客 - 文件索引
type: channel
link: https://www.tushu.info/category/%E6%96%87%E4%BB%B6%E7%B4%A2%E5%BC%95/
description: 文件索引
items: 爆肝整理！超详细的Lucene学习教程

爆肝整理！超详细的Lucene学习教程
type: item
date: 2026-07-09T04:38:48+00:00
description: 一、Lucene 简介1.1 什么是 LuceneLucene 是一个强大的全文搜索框架（Full-Text Search Framework）。它并非拿来即用的应用产品，而是提供了实现如百度、谷歌桌面搜索等产品的底层工具库。1.2 Lucene 能做什么Lucene 功能看似单一，实则潜力无限。它允许输入若干字符串，提供全文搜索服务，能精准定位关键词位置。利用 Lucene，我们可以：为站内新闻建立索引，打造专属资料库；索引数据库表字段，避免使用 LIKE '%keyword%' 导致的锁表与性能问题；开发个人搜索引擎或嵌入式搜索功能。1.3 你该不该选择 Lucene以下是一些测试数据供参考，若性能表现符合预期，则可选择 Lucene：测试一：250 万记录，约 300M 文本，生成约 380M 索引，800 线程下平均处理时间 300ms。测试二：37000 记录，索引数据库两个 varchar 字段，索引文件 2.6M，800 线程下平均处理时间 1.5ms。二、Lucene 的工作方式Lucene 提供的服务主要包含写入和读出两部分。2.1 写入流程源字符串经 Analyzer（分析器） 处理，包括分词（将字符串分成单词）和去除 Stopword（停用词，可选操作）。将源中必要信息加入 Document 的各个 Field，按需设置 Field 的索引和存储属性。把索引写入存储器（内存或磁盘）。2.2 读出流程用户提供的搜索关键词经 Analyzer 处理。用处理后的关键词搜索索引，找到对应的 Document。用户根据需求从找到的 Document 中提取所需 Field。三、关键概念解读3.1 Analyzer（分析器）分析器将字符串按规则分词并去除无效词，如英文"of"、"the"，中文“的”、“地”等。其目的是按语义划分：英文因以单词为单位且空格分隔，分词较易；中文则需特定方法。例如：对于句子“我爱北京天安门”，分析器会将其分词，去除无效词后得到“我爱 北京 天安门”（假设的理想分词结果）。3.2 Document（文档）用户提供的源数据（如文本文件、字符串或数据库记录）经索引后以 Document 形式存储在索引文件中，搜索结果也以 Document 列表返回。比如一篇新闻文章，经 Lucene 处理后就是一个 Document。3.3 Field（字段）一个 Document 可包含多个 Field，如文章的“标题”、“正文”、“最后修改时间”等。Field 有 存储（Store） 和 索引（Index） 两个属性，通过不同组合满足需求：全文搜索：若要对标题和正文全文搜索，需将它们的索引属性设为真。结果展示：若希望直接从搜索结果提取标题，则标题域存储属性为真；正文域因太大可设为假，需要时再读取原文件。排序/过滤：仅提取最后修改时间则其存储属性为真，索引属性为假。3.4 Term（词项）Term 是搜索最小单位，表示文档中的一个词语，由词语及其所在 Field 组成。例如：在一篇关于旅游的文章中，“风景”这个词在正文中出现，那么“风景”和“正文”就构成一个 Term。3.5 Token（标记）原文注：此处修正为标准术语 TokenToken 是 Term 的一次出现，包含 Term 文本、起止偏移和类型字符串。同一句话中相同词语多次出现用同一 Term 表示，但不同位置用不同 Token 标记。例如：“我爱北京天安门，天安门上太阳升”，“天安门”出现两次，是同一个 Term，但两个位置分别有不同的 Token。3.6 Segment（段）添加索引时，Document 先写入小文件（Segment），再合并成大索引文件。比如有多个新闻文档，它们会先分别进入不同 Segment，然后合并。四、Lucene 的结构Lucene 包括 core 和 sandbox 两部分。Core 是稳定核心，Sandbox 包含附加功能如 Highlighter、各种分析器。Lucene Core 主要包含以下七个包：4.1 analysis包含内建分析器，如 WhitespaceAnalyzer（按空白字符分词）、StopAnalyzer（添加 Stopword 过滤）、StandardAnalyzer（常用）。4.2 document定义文档数据结构，如 Document 类和 Field 类。4.3 index有索引读写类。IndexWriter 负责写入 Segment 并合并优化，IndexReader 关注索引文件中文档组织形式及删除操作。4.4 queryParser解析查询语句，将查询按语法组成各种 Query 类查找结果。4.5 search包含从索引搜索结果的类，如 TermQuery、BooleanQuer…