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

搜索百科(1):Lucene —— 打开现代搜索世界的第一扇门

大家好,我是 INFINI Labs 的石阳。

这是《搜索百科》专栏系列文章,每天 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.2.x 系列
  • 开源协议:Apache License 2.0(商业友好)
  • 官网:https://lucene.apache.org/
  • GitHub: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. 环境准备

// Maven 依赖
<dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-core</artifactId><version>10.xx.xx</version>
</dependency>

2. 创建你的第一个索引

// 创建分析器(支持中文)
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. 执行搜索

// 搜索 "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 ?留言告诉我,我来插队!

对搜索技术感兴趣的朋友,欢迎关注《搜索百科》专栏,一起探讨与学习!

原文:https://infinilabs.cn/blog/2025/search-wiki-1-lucene/

http://www.wxhsa.cn/company.asp?id=7130

相关文章:

  • 02020308 .NET Core核心基础组件08-结构化日志和集中日志服务
  • zookeeper的配置
  • 02020307 .NET Core核心基础组件07-什么是Logging、NLog
  • 算法第一周博客
  • nid修改dbid/dbname
  • 攻防世界-parallel-comparator-200 - xxx
  • Manim实现脉冲闪烁特效
  • 2025.9.17总结
  • office2024安装包下载安装教程(2025最新整理)office2024专业增强版下载安装教程
  • 2025竞赛学习资料
  • C++ 模板参数推导问题小记(模板类的模板构造函数)
  • axios两种写法
  • adobe illustrator中使用画笔工具切割图形
  • 2025年了,在 Django 之外,Python Web 框架还能怎么选?
  • AtCoder Beginner Contest 423
  • SRAM和DRAM的特点和区别
  • xml基本语法
  • Java25新特性
  • Day17多维数组
  • C++ lambda 匿名函数
  • D拼数
  • 20250917 - WETToken 攻击事件:价格操控产生的套利空间
  • 题解:P6798 「StOI-2」简单的树
  • 题解:P11704 [ROIR 2025] 旅行路线
  • 题解:P11292 【MX-S6-T4】「KDOI-11」彩灯晚会
  • 算法课程第一周作业
  • 实测对比:权威榜单之微信排版Top 5编辑器大揭秘
  • 自建仓库推送到NAS采用 Docker Registry 工作流
  • 【汇编和指令集 . 第2025 . 9期】发现大牛
  • Opencompass避坑日记