使用 dmesg 来查看一些硬件或驱动程序的信息或问题。

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

liaosy 发表了文章 • 0 个评论 • 1083 次浏览 • 2 天前 • 来自相关话题

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

这是《搜索百科》系列文章,每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。

搜索技术看似专业,但它早已深度融入我们的日常生活。无论是电商搜索、知识检索,还是 AI 语义搜索、RAG、向量检索,背后都有经典与新兴技术的结合。希望这个系列能帮大家建立更清晰的认知,也欢迎留言交流。

引言:为什么先写 Lucene?


![](https://infinilabs.cn/img/blog ... /1.jpg)

如果你曾用 GitHub 搜代码、用电商网站搜商品,或者在日志平台里“捞”报错,你就已经享受了 Lucene 的红利——只是自己还不知道。今天,让我们认识下这位“幕后大佬”,看看它如何以一己之力,孵化了整个现代搜索江湖。没有它,就没有 Elasticsearch 的锋芒,也没有 Solr 的稳健。讲搜索,不从 Lucene 开始,就像讲武侠不提《易筋经》——根基都丢了。

诞生故事:一个程序员的“副业”成果


Lucene 的诞生颇具传奇色彩。它的创造者 Doug Cutting(后来也是 Hadoop 的创始人之一)在 1997 年开始开发 Lucene,最初是为了给他的个人项目——一个网络爬虫和搜索引擎——提供搜索能力。

![](https://infinilabs.cn/img/blog ... /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)备注“搜索百科”,拉你进  **搜索技术交流群**,一起探讨与学习!

    > 原文:https://infinilabs.cn/blog/202 ... cene/

一个山寨的Lucene ------- Tantivy

Charele 回复了问题 • 2 人关注 • 2 个回复 • 3203 次浏览 • 2024-06-29 17:15 • 来自相关话题

Lucene里面关于存储压缩的疑问

回复

Charele 回复了问题 • 2 人关注 • 5 个回复 • 3534 次浏览 • 2024-06-25 11:47 • 来自相关话题

关于Lucene的正则查询

回复

Charele 回复了问题 • 2 人关注 • 4 个回复 • 3398 次浏览 • 2024-05-30 22:45 • 来自相关话题

Lucene里面的FST

回复

Charele 回复了问题 • 2 人关注 • 6 个回复 • 3994 次浏览 • 2024-05-18 12:51 • 来自相关话题

关于span查询

回复

Charele 回复了问题 • 1 人关注 • 2 个回复 • 4867 次浏览 • 2024-05-14 12:22 • 来自相关话题

Lucene里的王安德打分器

回复

Charele 回复了问题 • 1 人关注 • 5 个回复 • 5162 次浏览 • 2024-05-12 11:42 • 来自相关话题

Lucene9.10.0的新特性

回复

Charele 回复了问题 • 1 人关注 • 3 个回复 • 3996 次浏览 • 2024-04-13 13:44 • 来自相关话题

Lucene里面的bloom过滤

回复

Charele 回复了问题 • 1 人关注 • 10 个回复 • 3429 次浏览 • 2024-04-12 22:04 • 来自相关话题

TieredMergePolicy中的为什么当hitTooLarge为true时,skew设为最优值

Charele 回复了问题 • 2 人关注 • 1 个回复 • 1982 次浏览 • 2023-08-16 23:34 • 来自相关话题

关于Lucene点值的疑问

Charele 回复了问题 • 2 人关注 • 4 个回复 • 1846 次浏览 • 2024-05-30 15:50 • 来自相关话题

跑lucene的单测有点问题,谁知道怎么处理

回复

zhaocheng 发起了问题 • 1 人关注 • 0 个回复 • 2738 次浏览 • 2022-02-18 09:41 • 来自相关话题

如何保证Lucene创建的索引数据的安全性?

Charele 回复了问题 • 3 人关注 • 2 个回复 • 2057 次浏览 • 2024-04-24 12:38 • 来自相关话题

lucene 或者 es中不存储原字段的应用场景是什么呢???

Charele 回复了问题 • 3 人关注 • 2 个回复 • 3333 次浏览 • 2020-07-22 15:32 • 来自相关话题

es里的document的"_id"和org.apache.lucene.search.ScoreDoc.doc是什么关系

Charele 回复了问题 • 3 人关注 • 2 个回复 • 3838 次浏览 • 2020-07-22 15:47 • 来自相关话题