--- title: "搜索百科(1):Lucene — 打开现代搜索世界的第一扇门" date: 2025-09-09 lastmod: 2025-09-09 description: "《搜索百科》专栏系列,本文主要介绍 Apache Lucene,它是一个用 Java 编写的高性能、全文搜索引擎库。提供了强大的索引和查询能力,支持分词、倒排索引、相关性评分、模糊查询、布尔查询等一系列功能。它是 Elasticsearch、Solr、Easysearch、OpenSearch 等现代搜索引擎的核心引擎。" tags: ["Lucene", "搜索引擎", "搜索百科"] summary: "大家好,我是 INFINI Labs 的石阳。 这是《搜索百科》专栏系列博客第 1 篇,每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。 搜索技术看似专业,但它早已深度融入我们的日常生活。无论是电商搜索、知识检索,还是 AI 语义搜索、RAG、向量检索,背后都有经典与新兴技术的结合。希望这个系列能帮大家建立更清晰的认知,也欢迎留言交流。 引言:为什么先写 Lucene? # 如果你曾用 GitHub 搜代码、用电商网站搜商品,或者在日志平台里“捞”报错,你就已经享受了 Lucene 的红利——只是自己还不知道。今天,让我们认识下这位“幕后大佬”,看看它如何以一己之力,孵化了整个现代搜索江湖。没有它,就没有 Elasticsearch 的锋芒,也没有 Solr 的稳健。讲搜索,不从 Lucene 开始,就像讲武侠不提《易筋经》——根基都丢了。 诞生故事:一个程序员的“副业”成果 # Lucene 的诞生颇具传奇色彩。它的创造者 Doug Cutting(后来也是 Hadoop 的创始人之一)在 1997 年开始开发 Lucene,最初是为了给他的个人项目——一个网络爬虫和搜索引擎——提供搜索能力。 当时,市面上并没有成熟的开源搜索库可用,Doug 决定自己写一个。他在业余时间一点点打磨,最终在 1999 年发布了第一个版本。2001 年,Lucene 加入了 Apache 软件基金会,成为 Apache 的第一个开源搜索项目。 有趣的是,Lucene 的名字并不是来自什么技术术语,而是取自 Doug Cutting 妻子的中间名——Lucene。这也让这个项目多了一丝浪漫的色彩。 Lucene 概述 # Apache Lucene,是一个用 Java 编写的高性能、全文搜索引擎库。它不是那种你下载下来就能直接用的“搜索软件”,而是一个底层库,就像乐高积木里的基础砖块,虽然不起眼,但没有它,很多搜索产品根本搭不起来。 Lucene 提供了强大的索引和查询能力,支持分词、倒排索引、相关性评分、模糊查询、布尔查询等一系列功能。它是 Elasticsearch、Solr、Easysearch、OpenSearch 等现代搜索引擎的核心引擎。 首次发布:1999 年 最新版本:截至 2025 年 9 月,Lucene 已更新至 10." --- 大家好,我是 INFINI Labs 的石阳。 这是《搜索百科》专栏系列博客第 1 篇,每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。 搜索技术看似专业,但它早已深度融入我们的日常生活。无论是电商搜索、知识检索,还是 AI 语义搜索、RAG、向量检索,背后都有经典与新兴技术的结合。希望这个系列能帮大家建立更清晰的认知,也欢迎留言交流。 ## 引言:为什么先写 Lucene? {{% load-img "/img/blog/2025/search-wiki-1-lucene/1.jpg" "" %}} 如果你曾用 GitHub 搜代码、用电商网站搜商品,或者在日志平台里“捞”报错,你就已经享受了 Lucene 的红利——只是自己还不知道。今天,让我们认识下这位“幕后大佬”,看看它如何以一己之力,孵化了整个现代搜索江湖。没有它,就没有 Elasticsearch 的锋芒,也没有 Solr 的稳健。讲搜索,不从 Lucene 开始,就像讲武侠不提《易筋经》——根基都丢了。 ## 诞生故事:一个程序员的“副业”成果 Lucene 的诞生颇具传奇色彩。它的创造者 **Doug Cutting**(后来也是 Hadoop 的创始人之一)在 1997 年开始开发 Lucene,最初是为了给他的个人项目——一个网络爬虫和搜索引擎——提供搜索能力。 {{% load-img "/img/blog/2025/search-wiki-1-lucene/2.jpg" "" %}} 当时,市面上并没有成熟的开源搜索库可用,Doug 决定自己写一个。他在业余时间一点点打磨,最终在 1999 年发布了第一个版本。2001 年,Lucene 加入了 Apache 软件基金会,成为 Apache 的第一个开源搜索项目。 有趣的是,Lucene 的名字并不是来自什么技术术语,而是取自 Doug Cutting 妻子的中间名——**Lucene**。这也让这个项目多了一丝浪漫的色彩。 ## Lucene 概述 Apache Lucene,是一个用 Java 编写的**高性能、全文搜索引擎库**。它不是那种你下载下来就能直接用的“搜索软件”,而是一个**底层库**,就像乐高积木里的基础砖块,虽然不起眼,但没有它,很多搜索产品根本搭不起来。 Lucene 提供了强大的**索引和查询能力**,支持分词、倒排索引、相关性评分、模糊查询、布尔查询等一系列功能。它是 **Elasticsearch、Solr、Easysearch、OpenSearch** 等现代搜索引擎的核心引擎。 - **首次发布**:1999 年 - **最新版本**:截至 2025 年 9 月,Lucene 已更新至 `10.2.x` 系列 - **开源协议**:Apache License 2.0(商业友好) - **官网**:[https://lucene.apache.org/](https://lucene.apache.org/) - **GitHub**:[https://github.com/apache/lucene](https://github.com/apache/lucene) ## 社区生态 虽然已经 25 岁"高龄",Lucene 的社区却依然**活力满满**。作为 Apache 软件基金会的顶级项目,它拥有: - 100+ 活跃贡献者 - 每月都有新的 commit 和 issue 处理 - 每年发布 2-4 个主要版本 - 完善的文档和活跃的邮件列表 虽然不像 Elasticsearch 那样“出圈”,但在开发者和企业内部系统中仍有广泛使用。 ## 功能亮点:为什么大家都爱它? - **高性能全文检索内核**:倒排索引、短语/布尔/通配符/模糊查询、相关性打分。 - **面向工程的可扩展分析链**:分词器、过滤器、同义词、停用词、高亮、排序等。 - **近邻向量检索(KNN)**:原生支持高维向量的最近邻搜索,为语义检索/RAG 奠基。  - **嵌入式 & 纯 Java**:作为库嵌入任意 Java 应用,掌控细粒度行为与性能。 - **成熟稳定的版本线**:9.x 与 10.x 并行演进,兼顾稳定与新特性。 ## 对比优势:Lucene vs 世界 | 产品 | 类型 | 与 Lucene 的关系 | | ------------- | ---------- | ---------------------------------------- | | Elasticsearch | 分布式引擎 | 基于 Lucene,提供分布式、RESTful 接口 | | Apache Solr | 搜索平台 | 基于 Lucene,提供 Web 管理界面和更多功能 | | Meilisearch | 轻量引擎 | 不基于 Lucene,用 Rust 编写,主打易用性 | Lucene 是**底层引擎**,而其他产品是在它之上构建的**完整解决方案**。如果你想要完全控制搜索逻辑,Lucene 是最佳选择;如果你想要开箱即用的搜索服务,可以考虑 Elasticsearch 或 Solr。 ## 快速上手:10 分钟体验 Lucene 虽然 Lucene 需要写一些 Java 代码,但其实入门并不复杂。 ### 1. 环境准备 ```java // Maven 依赖 org.apache.lucene lucene-core 10.xx.xx ``` ### 2. 创建你的第一个索引 ```java // 创建分析器(支持中文) Analyzer analyzer = new StandardAnalyzer(); // 创建索引 Directory directory = FSDirectory.open(Paths.get("index")); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(directory, config); Document doc = new Document(); doc.add(new TextField("content", "欢迎来到 Lucene 的世界", Field.Store.YES)); writer.addDocument(doc); writer.close(); ``` ### 3. 执行搜索 ```java // 搜索 "Lucene" Query query = new TermQuery(new Term("content", "lucene")); IndexReader reader = DirectoryReader.open(directory); IndexSearcher searcher = new IndexSearcher(reader); TopDocs results = searcher.search(query, 10); System.out.println("找到 " + results.totalHits + " 条结果"); ``` 几行 Java 代码,就能完成一个迷你搜索引擎。 ## 结语 Apache Lucene 虽然不是面向最终用户的产品,但它是**搜索技术的基石**。几乎所有现代搜索引擎都离不开它。如果你对搜索技术有兴趣,学习 Lucene 是理解搜索引擎工作原理的最佳途径。 --- 🚀 **下期预告** 下一篇,我将介绍 Lucene 的第一个"孩子"—— **Apache Solr**,看看这个基于 Lucene 的企业级搜索平台如何让搜索变得更简单。 💬 **三连互动** 1. 你或公司最近在用 Lucene 吗?拿来做了什么场景? 2. 你觉得 Lucene 最香 / 最坑的点是什么? 3. 下一期想先看 **Solr** 还是 **Elasticsearch** ?留言告诉我,我来插队! 对搜索技术感兴趣的朋友,也欢迎加我微信(ID:lsy965145175)备注“搜索百科”,拉你进  **搜索技术交流群**,一起探讨与学习!