身安不如心安,屋宽不如心宽 。
solr

solr

搜索百科(2):Apache Solr — 企业级搜索的开源先锋

开源项目liaosy 发表了文章 • 0 个评论 • 36 次浏览 • 2 小时前 • 来自相关话题

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

欢迎回到 《搜索百科》 专栏!每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。

上一篇我们认识了搜索技术的基石 Apache Lucene,今天我们将继续这个旅程,了解基于 Lucene 构建的第一个成功商业级搜索平台 —— Apache Solr

Solr 是什么?

Solr 是一款极速的开源多模态搜索平台,基于 Apache Lucene 的全文、向量和地理空间搜索能力构建而成。Solr 具备高可靠性、可扩展性和容错性,支持分布式索引、复制与负载均衡查询,提供自动故障转移与恢复、集中化配置等功能。如今,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 项目。

技术架构

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. 下载和安装

# 下载 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

# 创建测试 Core
bin/solr create -c test_core

# 查看 Core 状态
bin/solr status

3. 索引文档

# 使用 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 '<commit/>' -H 'Content-type:application/xml'

4. 执行搜索

# 搜索"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"

执行搜索返回结果:

访问 http://localhost:8983/solr 即可使用 Solr 的管理界面。

Dashboard:

Core Admin:

结语

从最初的公司内部工具,到成为全球范围内广泛使用的开源搜索引擎,Apache Solr 见证并推动了搜索技术的进化。尽管近年来 Elasticsearch、向量数据库和 AI 驱动的搜索技术逐渐崛起,但 Solr 依然是许多企业可靠且成熟的选择。它的故事不仅属于开源社区,也代表了搜索技术发展的一个重要阶段。


🚀 下期预告
在下一篇「搜索百科」中,我们将介绍它的明星兄弟 —— Elasticsearch

💬 三连互动

  1. 你现在还在用 Solr 吗?
  2. 在 Solr 和 Elasticsearch 之间做过技术选型?
  3. 遇到过有趣的 Solr 使用案例或挑战?

对搜索技术感兴趣的朋友,也欢迎加我微信(ID:lsy965145175)备注“搜索百科”,拉你进  搜索技术交流群,一起探讨与学习!

✨ 推荐阅读

🔗 参考

原文:https://infinilabs.cn/blog/2025/search-wiki-2-solr/

ES能不能像solr那样提交commit后改动才生效?实现全量更新索引的无缝衔接

ElasticsearchCharele 回复了问题 • 2 人关注 • 1 个回复 • 4067 次浏览 • 2022-12-05 20:36 • 来自相关话题

社区日报 第322期 (2018-07-04)

社区日报elk123 发表了文章 • 0 个评论 • 2190 次浏览 • 2018-07-04 13:50 • 来自相关话题

1.es与solr的15个不同点;  http://t.cn/RdwtPxy  2.ES熔断器了解一下;  http://t.cn/Rd7tMFJ  3.如何取消一个ES检索;  http://t.cn/Rd7cdBi    活动预告  1. 7月21日上海meetup演讲申请中  https://elasticsearch.cn/m/article/655    编辑:wt  归档:https://elasticsearch.cn/article/697 订阅:https://tinyletter.com/elastic-daily
1.es与solr的15个不同点;  http://t.cn/RdwtPxy  2.ES熔断器了解一下;  http://t.cn/Rd7tMFJ  3.如何取消一个ES检索;  http://t.cn/Rd7cdBi    活动预告  1. 7月21日上海meetup演讲申请中  https://elasticsearch.cn/m/article/655    编辑:wt  归档:https://elasticsearch.cn/article/697 订阅:https://tinyletter.com/elastic-daily

【阿里巴巴】【急聘】高级搜索研发专家

求职招聘jaredguo 发表了文章 • 0 个评论 • 5712 次浏览 • 2017-08-03 16:18 • 来自相关话题

岗位描述: 1. 负责阿里云上搜索云产品的设计和研发工作,确保项目质量和进度  2. 能深入理解产品和业务,推动技术不断升级,解决客户和平台问题。 岗位要求: 1. 编程基本功扎实,熟悉常用数据结构和算法,擅长Java编程语言,熟悉JVM机制,熟悉shell、python等脚本语言;  2. 学习能力较强,有较好的逻辑思维能力,较强的抽象、概括和总结能力,有较好的沟通交流能力,善于主动思考,对技术有强烈激情;  3. 熟悉ElasticSearch/Lucene开源系统 4. 熟悉分布式系统,例如hadoop、spark、flink,有云计算相关开发经验者优先  5. 具有敏捷开发经验者优先,具有完整产品生命周期开发者优先   阿里云近期会推出ES云产品,正在组建ES专家小组,工作地点北京、杭州,薪资待遇优厚,简历请发送至ruijie.guo@alibaba-inc.com
岗位描述: 1. 负责阿里云上搜索云产品的设计和研发工作,确保项目质量和进度  2. 能深入理解产品和业务,推动技术不断升级,解决客户和平台问题。 岗位要求: 1. 编程基本功扎实,熟悉常用数据结构和算法,擅长Java编程语言,熟悉JVM机制,熟悉shell、python等脚本语言;  2. 学习能力较强,有较好的逻辑思维能力,较强的抽象、概括和总结能力,有较好的沟通交流能力,善于主动思考,对技术有强烈激情;  3. 熟悉ElasticSearch/Lucene开源系统 4. 熟悉分布式系统,例如hadoop、spark、flink,有云计算相关开发经验者优先  5. 具有敏捷开发经验者优先,具有完整产品生命周期开发者优先   阿里云近期会推出ES云产品,正在组建ES专家小组,工作地点北京、杭州,薪资待遇优厚,简历请发送至ruijie.guo@alibaba-inc.com

ES能不能像solr那样提交commit后改动才生效?实现全量更新索引的无缝衔接

回复

ElasticsearchCharele 回复了问题 • 2 人关注 • 1 个回复 • 4067 次浏览 • 2022-12-05 20:36 • 来自相关话题

搜索百科(2):Apache Solr — 企业级搜索的开源先锋

开源项目liaosy 发表了文章 • 0 个评论 • 36 次浏览 • 2 小时前 • 来自相关话题

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

欢迎回到 《搜索百科》 专栏!每天 5 分钟,带你速览一款搜索相关的技术或产品,同时还会带你探索它们背后的技术原理、发展故事及上手体验等。

上一篇我们认识了搜索技术的基石 Apache Lucene,今天我们将继续这个旅程,了解基于 Lucene 构建的第一个成功商业级搜索平台 —— Apache Solr

Solr 是什么?

Solr 是一款极速的开源多模态搜索平台,基于 Apache Lucene 的全文、向量和地理空间搜索能力构建而成。Solr 具备高可靠性、可扩展性和容错性,支持分布式索引、复制与负载均衡查询,提供自动故障转移与恢复、集中化配置等功能。如今,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 项目。

技术架构

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. 下载和安装

# 下载 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

# 创建测试 Core
bin/solr create -c test_core

# 查看 Core 状态
bin/solr status

3. 索引文档

# 使用 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 '<commit/>' -H 'Content-type:application/xml'

4. 执行搜索

# 搜索"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"

执行搜索返回结果:

访问 http://localhost:8983/solr 即可使用 Solr 的管理界面。

Dashboard:

Core Admin:

结语

从最初的公司内部工具,到成为全球范围内广泛使用的开源搜索引擎,Apache Solr 见证并推动了搜索技术的进化。尽管近年来 Elasticsearch、向量数据库和 AI 驱动的搜索技术逐渐崛起,但 Solr 依然是许多企业可靠且成熟的选择。它的故事不仅属于开源社区,也代表了搜索技术发展的一个重要阶段。


🚀 下期预告
在下一篇「搜索百科」中,我们将介绍它的明星兄弟 —— Elasticsearch

💬 三连互动

  1. 你现在还在用 Solr 吗?
  2. 在 Solr 和 Elasticsearch 之间做过技术选型?
  3. 遇到过有趣的 Solr 使用案例或挑战?

对搜索技术感兴趣的朋友,也欢迎加我微信(ID:lsy965145175)备注“搜索百科”,拉你进  搜索技术交流群,一起探讨与学习!

✨ 推荐阅读

🔗 参考

原文:https://infinilabs.cn/blog/2025/search-wiki-2-solr/

社区日报 第322期 (2018-07-04)

社区日报elk123 发表了文章 • 0 个评论 • 2190 次浏览 • 2018-07-04 13:50 • 来自相关话题

1.es与solr的15个不同点;  http://t.cn/RdwtPxy  2.ES熔断器了解一下;  http://t.cn/Rd7tMFJ  3.如何取消一个ES检索;  http://t.cn/Rd7cdBi    活动预告  1. 7月21日上海meetup演讲申请中  https://elasticsearch.cn/m/article/655    编辑:wt  归档:https://elasticsearch.cn/article/697 订阅:https://tinyletter.com/elastic-daily
1.es与solr的15个不同点;  http://t.cn/RdwtPxy  2.ES熔断器了解一下;  http://t.cn/Rd7tMFJ  3.如何取消一个ES检索;  http://t.cn/Rd7cdBi    活动预告  1. 7月21日上海meetup演讲申请中  https://elasticsearch.cn/m/article/655    编辑:wt  归档:https://elasticsearch.cn/article/697 订阅:https://tinyletter.com/elastic-daily

【阿里巴巴】【急聘】高级搜索研发专家

求职招聘jaredguo 发表了文章 • 0 个评论 • 5712 次浏览 • 2017-08-03 16:18 • 来自相关话题

岗位描述: 1. 负责阿里云上搜索云产品的设计和研发工作,确保项目质量和进度  2. 能深入理解产品和业务,推动技术不断升级,解决客户和平台问题。 岗位要求: 1. 编程基本功扎实,熟悉常用数据结构和算法,擅长Java编程语言,熟悉JVM机制,熟悉shell、python等脚本语言;  2. 学习能力较强,有较好的逻辑思维能力,较强的抽象、概括和总结能力,有较好的沟通交流能力,善于主动思考,对技术有强烈激情;  3. 熟悉ElasticSearch/Lucene开源系统 4. 熟悉分布式系统,例如hadoop、spark、flink,有云计算相关开发经验者优先  5. 具有敏捷开发经验者优先,具有完整产品生命周期开发者优先   阿里云近期会推出ES云产品,正在组建ES专家小组,工作地点北京、杭州,薪资待遇优厚,简历请发送至ruijie.guo@alibaba-inc.com
岗位描述: 1. 负责阿里云上搜索云产品的设计和研发工作,确保项目质量和进度  2. 能深入理解产品和业务,推动技术不断升级,解决客户和平台问题。 岗位要求: 1. 编程基本功扎实,熟悉常用数据结构和算法,擅长Java编程语言,熟悉JVM机制,熟悉shell、python等脚本语言;  2. 学习能力较强,有较好的逻辑思维能力,较强的抽象、概括和总结能力,有较好的沟通交流能力,善于主动思考,对技术有强烈激情;  3. 熟悉ElasticSearch/Lucene开源系统 4. 熟悉分布式系统,例如hadoop、spark、flink,有云计算相关开发经验者优先  5. 具有敏捷开发经验者优先,具有完整产品生命周期开发者优先   阿里云近期会推出ES云产品,正在组建ES专家小组,工作地点北京、杭州,薪资待遇优厚,简历请发送至ruijie.guo@alibaba-inc.com