文档章节

【原创】Lucene vs Solr

摩云飞
 摩云飞
发布于 2016/04/20 17:38
字数 1084
阅读 123
收藏 7
点赞 1
评论 0

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 是一个实现好的数据库程序,安装后就可以直接用了。


附赠:Apache Solr vs Elasticsearch



© 著作权归作者所有

共有 人打赏支持
摩云飞
粉丝 364
博文 352
码字总数 952690
作品 0
徐汇
程序员
Solr简单介绍

简介 Solr是一个高性能,采用Java5开发,Solr基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了优化,并且提...

邵鸿鑫 ⋅ 2016/06/29 ⋅ 0

Solr Apache Solr 初级教程(介绍、安装部署、Java接口、中文分词)

Apache Solr 介绍 Solr 是什么? Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现。服务器通信使用标准的HTTP 和XML,所以如果使用Solr 了解Java 技术会有用却不是...

David_Tio ⋅ 2013/12/05 ⋅ 0

Solr使用入门指南

由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有集中方案可供选择: 1. 基于Lucene自己进行封装实现站内搜索。...

帅的不像男的 ⋅ 2016/05/24 ⋅ 0

solr原理详解

Solr对外提供标准的http接口来实现对数据的索引的增加、删除、修改、查询。在 Solr 中,用户通过向部署在servlet 容器中的 Solr Web 应用程序发送 HTTP 请求来启动索引和搜索。Solr 接受请求...

超人学院 ⋅ 2016/07/07 ⋅ 0

在 Ubuntu 12.04 LTS 上通过 Tomcat 部署 Solr 4

这个简短的教程描述了如何在 Ubuntu Server 上安装 Solr 4,我使用的版本是:Ubuntu Server 12.04 和 Apache Solr 4.0-BETA. 我同时将展示如何测试安装以及执行一个简单的索引和查询任务。 ...

红薯 ⋅ 2012/09/24 ⋅ 11

lucene solr在tomcat中的配置

1.建立d:lucenesolrhome路径。然后将examplesolr目录中的文件拷贝过来 2.建立d:lucenesolrserver将examplewebapp中的solr.war拷贝过来,并解压。 3.修改d:lucenesolrhomeconfsorlconifg.xml中...

dapengking ⋅ 2012/07/10 ⋅ 0

solrconfig.xml配置详解

solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置。 可以在tomcat的安装路径下找到这个文件C:Program FilesApache Software ...

java梦想家01 ⋅ 2015/03/30 ⋅ 0

Lucene 3.5和Solr 3.5:大幅降低内存用量、SearcherManager和深度分页支持

Lucene项目管理委员会宣布Apache Lucene 3.5.0和Apache Solr 3.5.0已经可以使用。Lucene是一个高性能、支持全文搜索的文本搜索开发库。Solr是一个独立的搜索服务器,其核心使用了Lucene来做索...

墙头草 ⋅ 2012/02/03 ⋅ 7

全文搜索服务器--Solr

solr 名称来源 Search On Lucene Replication solr 基本概况 Apache Solr (读音: SOLer) 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。Apache ...

匿名 ⋅ 2008/09/07 ⋅ 14

Why and when we need?

Lately, I am going to handle a project about building a search engine for whole macau's information data. And I hope doing the research first, and here is my note. Why and When ......

陈昊Sevens ⋅ 2016/05/07 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)

之前没接触过证书加密的话,对证书相关的这些概念真是感觉挺棘手的,因为一下子来了一大堆新名词,看起来像是另一个领域的东西,而不是我们所熟悉的编程领域的那些东西,起码我个人感觉如此,且很长...

颖辉小居 ⋅ 19分钟前 ⋅ 0

利用有限制通配符提升API灵活性(28)

1、参数化类型是不可变的 List<String> 不是List<Object>的子类,但是二者是有联系的 利用有限制的通配符类型处理类似情况 List<? extends Object>(生产者) Collection<? super E>(消费者......

职业搬砖20年 ⋅ 26分钟前 ⋅ 0

ssm框架 +bootstrap分页

这里有两种方式 方式一:自己写分页 方式二:使用插件PageHelper 1.自己写分页 1.1 效果 1.2 实现过程 1.2.1 创建分页公共类 //---------------------------1.属性-------------------------...

Lucky_Me ⋅ 33分钟前 ⋅ 0

Istio

helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml after $ kubectl create namespace istio-system$ kubectl create -f $HOME/ist......

openthings ⋅ 33分钟前 ⋅ 0

内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117 ⋅ 38分钟前 ⋅ 0

elasticsearch2.4.6升级为elasticsearch-5.5.0的经历

将elasticsearch-5.5.0 中的配置 path.data 指向原来的数据路径 即 path.data: /usr/local/src/elasticsearch-2.4.6/data 注意: elasticsearch-5.5.0 需要将jdk版本升级到1.8...

晨猫 ⋅ 39分钟前 ⋅ 1

lvm讲解 磁盘故障小案例

1

oschina130111 ⋅ 43分钟前 ⋅ 0

那些提升开发人员工作效率的在线工具

本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中要经常使用到的。 Hollis偏爱使用...

时刻在奔跑 ⋅ 55分钟前 ⋅ 0

restful风格 实现DELETE PUT请求 的web.xml的配置

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframe......

泉天下 ⋅ 今天 ⋅ 0

Shell数组

Shell数组 Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数...

蜗牛奔跑 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部