【原创】Lucene vs Solr

简介:

Lucene vs Solr  

原文地址:这里 。

许多新接触 Lucene 和 Solr 的朋友会问这样的问题:我应该使用 Lucene 和 Solr 中的哪一个?  
其实答案很简单:如果你是像上面那样问自己的,那么 99% 的情况下,你需要使用的是 Solr 。  

将 Solr 和 Lucene 之间的关系进行概念化类比,可以想象一下汽车和其内部的引擎。你无法直接驾驶引擎,但是你可以驾驶车。同样的道理,Lucene 是一种程序库,你无法直接跑起来,而 Solr 是一种完整应用,可以拿来就用。  

什么是 Solr ?  

Apache Solr 是一种 web 应用,构建于 Lucene 之上,并实现了很多其他功能。  
其添加了如下功能:  
  • XML/HTTP and JSON APIs
  • Hit highlighting(高亮命中内容)
  • Faceted Search and Filtering分面搜索和过滤
  • Geospatial Search (地理空间搜索
  • Fast Incremental Updates and Index Replication(快读增量更新和索引复制)
  • Caching
  • Replication
  • Web administration interface etc
与 Lucene 不同的是,Solr 是一种 web 应用(WAR),可以部署在任意一种 servlet 容器中,例如 Jetty, Tomcat, Resin 等。  
Solr 可以被经由非程序人员安装和使用,而 Lucene 却不行。  

支持情况如何?  
Solr 社区非常活跃,能够提供大量帮助信息。  

Solr 的索引能被 Lucene 读取使用么?反过来可以么?  
由于 Solr 底层使用的是 Lucene ,所以 Solr 索引和 Lucene 索引是相同的东西。  
从技术上讲,其实不存在 Solr 索引这样一个东西,Solr 示例只会创建 Lucene 索引。  

那么我应该在什么情况下使用 Lucene ?  
例如,如果你需要嵌入搜索功能到桌面应用中,那么 Lucene 将是非常合适的选择。  
在你需要针对底层 Lucene API 进行高度定制化控制,直接使用 Solr 会造成一些困扰,因为其已经在 Lucene 之上提供了额外的间接层。  

参考:  
  1. Hit-Highlighting in Full-Text Search
  2. 分面搜索
  3. 地理位置搜索

========  

以下内容来自:   这里    

      首先 Solr 是基于 Lucene 做的,Lucene 是一套信息检索工具包,但并不包含搜索引擎系统,它包含了索引结构、读写索引工具、相关性工具、排序等功能,因此在使用 Lucene 时你仍需要关注搜索引擎系统,例如数据获取、解析、分词等方面的东西。  
      而 Solr 的目标是打造一款企业级的搜索引擎系统,因此它更接近于我们认识的搜索引擎系统,它是一个搜索引擎服务,通过各种 API 可以让你的应用使用搜索服务,而不需要将搜索逻辑耦合在应用中。而且 Solr 可以根据配置文件定义数据解析的方式,更像是一个搜索框架,它也支持主从、热换库等操作。还添加了飘红、facet 等搜索引擎常见功能的支持。  
      因而,Lucene 在使用上更加灵活,但是你需要自己处理搜素引擎系统架构,以及其他附加功能的实现。而 Solr 帮你做了更多,但是属于一种高层的框架,Lucene 很多新特性不能及时向上透传,所以有时候可能发现需要一个功能,Lucene 是支持的,但是 Solr 上已经看不到相关接口。  

      Lucene 更像是一个 SDK 。有完整的 API 族以及对应的实现。你可以利用这些在自己的应用里实现高级查询(基于倒排索引技术的),Lucene 对单机或者桌面应用很实用很方便。   但是 Lucene,需要开发者自己维护索引文件,在多机环境中备份同步索引文件很是麻烦。于是就有了 Solr 。   
      而 Solr 是一个有 HTTP 接口的基于 Lucene 的查询服务器,封装了很多 Lucene 细节,自己的应用可以直接利用诸如 .../solr?q=abc 这样的 HTTP GET/POST 请求去查询,维护修改索引。  
      给个比方就是,Lucene 是给你一堆包,让你自己从底层构建一个数据库。而 Solr 是一个实现好的数据库程序,安装后就可以直接用了。  
目录
相关文章
|
4月前
|
人工智能 JavaScript Linux
5分钟零门槛上手“龙虾”AI助手!OpenClaw(Clawdbot)全平台部署+免费API配置+避坑手册
2026年,OpenClaw(昵称“龙虾”)作为开源AI Agent领域的标杆工具,凭借“自主执行、技能扩展、跨平台适配”的核心优势,成为个人效率提升与轻量团队协作的首选。无论是自动化办公流程、批量处理数据,还是搭建私人知识库,OpenClaw都能通过模块化技能组合满足需求。但很多用户被“部署复杂、API配置繁琐”的问题劝退,实则随着2026年版本迭代,OpenClaw的部署流程已大幅简化,搭配阿里云百炼Coding Plan免费API,零基础用户也能快速上手。
1181 3
|
1月前
|
人工智能 算法 项目管理
Hermes Agent 总记不住你说的话?3 步治好 AI 助手的"健忘症"
Hermes Agent“健忘”源于核心记忆文件MEMORY.md仅2000字符容量,导致跨对话信息无法持久保存。本文详解三步解决方案:①扩容配置(治标);②启用8种外部记忆扩展(如Holographic、Mem0、Supermemory等,治本);③实时查看记忆状态。让AI真正记住你。
710 2
Hermes Agent 总记不住你说的话?3 步治好 AI 助手的"健忘症"
|
存储 前端开发
【大前端】用html和css写一个QQ邮箱登录页面
【大前端】用html和css写一个QQ邮箱登录页面
1462 0
【大前端】用html和css写一个QQ邮箱登录页面
|
Dart
Flutter之ExpansionTile实现以代码方式码折叠、展开
Flutter之ExpansionTile实现以代码方式码折叠、展开
540 4
|
安全 JavaScript 前端开发
C++一分钟之-C++17特性:结构化绑定
【6月更文挑战第26天】C++17引入了结构化绑定,简化了从聚合类型如`std::tuple`、`std::array`和自定义结构体中解构数据。它允许直接将复合数据类型的元素绑定到单独变量,提高代码可读性。例如,可以从`std::tuple`中直接解构并绑定到变量,无需`std::get`。结构化绑定适用于处理`std::tuple`、`std::pair`,自定义结构体,甚至在范围for循环中解构容器元素。注意,绑定顺序必须与元素顺序匹配,考虑是否使用`const`和`&`,以及谨慎处理匿名类型。通过实例展示了如何解构嵌套结构体和元组,结构化绑定提升了代码的简洁性和效率。
519 5
|
前端开发
吃豆人来袭:CSS打造经典游戏动画,让网页设计更有趣!
吃豆人来袭:CSS打造经典游戏动画,让网页设计更有趣!
|
Ubuntu Linux 编译器
arm-linux-gcc交叉编译容器 centos7 环境
arm-linux-gcc交叉编译容器 centos7 环境
1287 1
|
Linux Windows Python
python 对陆地数据进行掩膜的两种方法
一般我们分析海洋或者气象相关数据时,经常会绘制散点图分析两重变量之间的相关性。近期在分析数据时,发现有个容易出问题的情况:
python 对陆地数据进行掩膜的两种方法
|
小程序
微信小程序scroll-view组件设置 scroll-top无效问题解决
微信小程序scroll-view组件设置 scroll-top无效问题解决
1716 0
|
开发框架 Java 应用服务中间件
eclipse中Tomcat version 9.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5, 6, 7, and 8 Web modules
eclipse中Tomcat version 9.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5, 6, 7, and 8 Web modules
910 0

热门文章

最新文章