--- title: "搜索百科(2):Apache Solr — 企业级搜索的开源先锋" date: 2025-09-12 lastmod: 2025-09-12 description: "《搜索百科》专栏系列,本文主要介绍 Apache Solr,它是一款极速的开源多模态搜索平台,基于 Apache Lucene 的全文、向量和地理空间搜索能力构建而成。Solr 具备高可靠性、可扩展性和容错性,支持分布式索引、复制与负载均衡查询,提供自动故障转移与恢复、集中化配置等功能。" tags: ["Solr", "Lucene", "搜索引擎", "搜索百科"] summary: "大家好,我是 INFINI Labs 的石阳。 欢迎回到 《搜索百科》 专栏!每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。 上一篇我们认识了搜索技术的基石 Apache Lucene,今天我们将继续这个旅程,了解基于 Lucene 构建的第一个成功商业级搜索平台 —— Apache Solr。 Solr 是什么? # Solr 是一款极速的开源多模态搜索平台,基于 Apache Lucene 的全文、向量和地理空间搜索能力构建而成。Solr 具备高可靠性、可扩展性和容错性,支持分布式索引、复制与负载均衡查询,提供自动故障转移与恢复、集中化配置等功能。如今,Solr 为全球众多大型互联网网站提供搜索和导航功能。 首次发布:2004 年,2006 年进入 Apache 最新版本:截至 2025 年,已更新至 9.x 系列 核心依赖:Apache Lucene 开源协议:Apache License 2.0 官方网址: https://solr.apache.org GitHub 仓库: https://github.com/apache/solr 它的定位是:把 Lucene 打造成独立的企业级搜索服务。相比 Lucene 需要写代码调用,Solr 提供了 Web 管理界面、REST API 和配置文件,让开发者更容易上手。 起源:从网站搜索到 Apache 顶级项目 # Solr(读作"solar")的故事始于 2004 年,当时 CNET 公司的开发人员 Yonik Seeley 需要为其新闻网站构建一个搜索功能。虽然 Lucene 提供了强大的核心搜索能力,但直接使用 Lucene 需要编写大量 Java 代码,缺乏开箱即用的功能。" --- 大家好,我是 INFINI Labs 的石阳。 欢迎回到 **《搜索百科》** 专栏!每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。 上一篇我们认识了搜索技术的基石 Apache Lucene,今天我们将继续这个旅程,了解基于 Lucene 构建的第一个成功商业级搜索平台 —— **Apache Solr**。 {{% load-img "/img/blog/2025/search-wiki-2-solr/1.jpg" "" %}} ## Solr 是什么? Solr 是一款极速的开源多模态搜索平台,基于 Apache Lucene 的全文、向量和地理空间搜索能力构建而成。Solr 具备高可靠性、可扩展性和容错性,支持分布式索引、复制与负载均衡查询,提供自动故障转移与恢复、集中化配置等功能。如今,Solr 为全球众多大型互联网网站提供搜索和导航功能。 - **首次发布**:2004 年,2006 年进入 Apache - **最新版本**:截至 2025 年,已更新至 9.x 系列 - **核心依赖**:Apache Lucene - **开源协议**:Apache License 2.0 - **官方网址**:[https://solr.apache.org](https://solr.apache.org) - **GitHub 仓库**:[https://github.com/apache/solr](https://github.com/apache/solr) 它的定位是:把 Lucene 打造成独立的企业级搜索服务。相比 Lucene 需要写代码调用,Solr 提供了 Web 管理界面、REST API 和配置文件,让开发者更容易上手。 ## 起源:从网站搜索到 Apache 顶级项目 **Solr**(读作"solar")的故事始于 2004 年,当时 CNET 公司的开发人员 **Yonik Seeley** 需要为其新闻网站构建一个搜索功能。虽然 Lucene 提供了强大的核心搜索能力,但直接使用 Lucene 需要编写大量 Java 代码,缺乏开箱即用的功能。 Seeley 决定在 Lucene 之上构建一个更易用的搜索服务器,于是 Solr 诞生了。最初的目标很明确:通过 HTTP/XML 接口提供搜索服务,让任何编程语言都能轻松集成搜索功能。 2006 年,Solr 捐赠给 Apache 基金会,2007 年成为顶级项目。2010 年,Solr 与 Lucene 项目合并,形成了今天我们所知的 **Apache Lucene/Solr** 项目。 ## 技术架构 {{% load-img "/img/blog/2025/search-wiki-2-solr/architecture.jpg" "" %}} **Index(索引)** Apache Solr 的索引就像是用于管理结构化 / 非结构化数据的“数据库”。它以便于分析和全文检索的方式存储数据。 **Query Parser(查询解析器)** 所有由客户端提交的查询都会由查询解析器处理。 **Response Handler(响应处理器)** 响应处理器负责为客户端生成合适格式的响应(如 JSON/XML/CSV)。 **Update Handler(更新处理器)** 更新处理器用于索引操作,即对索引中的数据进行插入、更新和删除。例如,如果我们希望 MySQL 数据与 Apache Solr 保持同步,就需要创建一个负责同步的更新处理器。 ## 功能亮点 - **全文检索**:高效支持关键词搜索、布尔查询、短语匹配等。 - **分面搜索(Faceted Search)**:可以对搜索结果进行分类和聚合统计。 - **分布式架构(SolrCloud)**:支持集群部署、自动分片、副本和容错。 - **丰富的数据接口**:提供 RESTful API,支持 JSON、XML、CSV 等多种格式的数据交互。 - **扩展性与可定制性**:通过插件机制支持多语言分词、排序、评分模型等个性化定制。 - **地理位置搜索**:内置空间搜索能力,支持基于经纬度的范围查询和排序。 ## 对比: Solr vs Elasticsearch 如何选择? 虽然两者都基于 Lucene,但在设计哲学上有所不同: | 特性 | Apache Solr | Elasticsearch | | ------------ | ----------------------- | -------------------- | | **定位** | 企业级搜索服务器 | 分布式搜索和分析引擎 | | **API** | 更标准化,遵循传统 REST | 更灵活,JSON 原生 | | **分布式** | 需要 ZooKeeper 协调 | 内置分布式协调 | | **上手难度** | 相对简单,开箱即用 | 学习曲线较陡峭 | | **生态系统** | 搜索功能更丰富 | 分析和可视化更强 | | **适用场景** | 传统企业搜索、电商 | 日志分析、实时监控 | 简单来说:Solr 更像"精装房",开箱即用;Elasticsearch 更像"毛坯房",需要更多自定义但更灵活。 ## 快速开始:5 分钟搭建 Solr 服务 ### 1. 下载和安装 ```bash # 下载 8.x 版 Solr wget https://dlcdn.apache.org/solr/solr/8.11.4/solr-8.11.4.tgz # 解压 tar -xzf solr-8.11.4.tgz # 启动 Solr(单机模式) cd solr-8.11.4 bin/solr start ``` ### 2. 创建 Core ```bash # 创建测试 Core bin/solr create -c test_core # 查看 Core 状态 bin/solr status ``` ### 3. 索引文档 ```bash # 使用 curl 索引 JSON 文档 curl http://localhost:8983/solr/test_core/update -d ' [ {"id": "1", "title": "Solr 入门指南", "content": "Apache Solr 是企业级搜索平台"}, {"id": "2", "title": "搜索技术演进", "content": "从 Lucene 到 Solr 的技术发展"} ]' -H 'Content-type:application/json' # 提交更改 curl http://localhost:8983/solr/test_core/update -d '' -H 'Content-type:application/xml' ``` ### 4. 执行搜索 ```bash # 搜索"Solr" curl "http://localhost:8983/solr/test_core/select?q=content:Solr" # 使用 JSON 格式返回 curl "http://localhost:8983/solr/test_core/select?q=content:Solr&wt=json" ``` 执行搜索返回结果: {{% load-img "/img/blog/2025/search-wiki-2-solr/2.png" "" %}} 访问 http://localhost:8983/solr 即可使用 Solr 的管理界面。 Dashboard: {{% load-img "/img/blog/2025/search-wiki-2-solr/3.png" "" %}} Core Admin: {{% load-img "/img/blog/2025/search-wiki-2-solr/4.png" "" %}} ## 结语 从最初的公司内部工具,到成为全球范围内广泛使用的开源搜索引擎,Apache Solr 见证并推动了搜索技术的进化。尽管近年来 Elasticsearch、向量数据库和 AI 驱动的搜索技术逐渐崛起,但 Solr 依然是许多企业可靠且成熟的选择。它的故事不仅属于开源社区,也代表了搜索技术发展的一个重要阶段。 --- 🚀 **下期预告** 在下一篇「搜索百科」中,我们将介绍它的明星兄弟 —— **Elasticsearch**。 💬 **三连互动** 1. 你现在还在用 Solr 吗? 2. 在 Solr 和 Elasticsearch 之间做过技术选型? 3. 遇到过有趣的 Solr 使用案例或挑战? 对搜索技术感兴趣的朋友,也欢迎加我微信(ID:lsy965145175)备注“搜索百科”,拉你进  **搜索技术交流群**,一起探讨与学习! ✨ **推荐阅读** - [搜索百科(1):Lucene — 打开现代搜索世界的第一扇门](https://infinilabs.cn/blog/2025/search-wiki-1-lucene/) 🔗 **参考资源** - [Apache Solr 官方文档](https://solr.apache.org/guide) - [Apache Solr Fundamentals](https://medium.com/@mansha99/apache-solr-fundamentals-43e360962cc8)