几种常见的基于Lucene的开源搜索解决方案对比

2019-03-27 01:14|来源: 网路

几种常见的基于Lucene的开源搜索解决方案对比[转]

http://blog.fulin.org/2010/11/search_solutions_compare.html

一  直接使用 Lucene  ( http://lucene.apache.org )

  1. 说明:Lucene 是一个 JAVA 搜索类库,它本身并不是一个完整的解决方案,需要额外的开发工作
  2. 优点:成熟的解决方案,有很多的成功案例。apache 顶级项目,正在持续快速的进步。庞大而活跃的开发社区,大量的开发人员。它只是一个类库,有足够的定制和优化空间:经过简单定制,就可以满足绝大部分常见的需求;经过优化,可以支持 10亿+ 量级的搜索。
  3. 缺点:需要额外的开发工作。所有的扩展,分布式,可靠性等都需要自己实现;非实时,从建索引到可以搜索中间有一个时间延迟,而当前的“近实时”(Lucene Near Real Time search )搜索方案的可扩展性有待进一步完善

二  Solr  ( http://lucene.apache.org/solr/ )

  1. 说明:基于 Lucene 的企业级搜索的开箱即用的解决方案
  2. 优点:比较成熟的解决方案,也有很多的成功案例。Lucene 子项目,实现了大部分常见的搜索功能需求,包括 facet 搜索 (搜索结果分类过滤)等。
  3. 缺点:可定制性比 Lucene 要差,一些不常见的需求,定制的难度比直接在 Lucene 上做要大的多。性能上,由于 Solr 的建索引和搜索是同一个进程,耦合度比较高,对于性能调优有一定的影响。

三 Katta ( http://katta.sourceforge.net/ )

  1. 说明:基于 Lucene 的,支持分布式,可扩展,具有容错功能,准实时的搜索方案。
  2. 优点:开箱即用,可以与 Hadoop 配合实现分布式。具备扩展和容错机制。
  3. 缺点:只是搜索方案,建索引部分还是需要自己实现。在搜索功能上,只实现了最基本的需求。成功案例较少,项目的成熟度稍微差一些。因为需要支持分布式,对于一些复杂的查询需求,定制的难度会比较大。

四 Hadoop contrib/index ( http://svn.apache.org/repos/asf/hadoop/mapreduce/trunk/src/contrib/index/README )

  1. 说明:Map/Reduce 模式的,分布式建索引方案,可以跟 Katta 配合使用。
  2. 优点:分布式建索引,具备可扩展性。
  3. 缺点:只是建索引方案,不包括搜索实现。工作在批处理模式,对实时搜索的支持不佳。

五 LinkedIn 的开源方案 ( http://sna-projects.com/ )

  1. 说明:基于 Lucene 的一系列解决方案,包括 准实时搜索 zoie ,facet 搜索实现 bobo ,机器学习算法 decomposer ,摘要存储库 krati ,数据库模式包装 sensei 等等
  2. 优点:经过验证的解决方案,支持分布式,可扩展,丰富的功能实现
  3. 缺点:与 linkedin 公司的联系太紧密,可定制性比较差

六 ElasticSearch  ( http://www.elasticsearch.com/ )

  1. 说明:基于 Lucene 的,分布式,云端,提供 rest 接口的搜索解决方案
  2. 优点:开箱即用,分布式,rest 接口,支持云端调用
  3. 缺点:一个新的项目,没有经过很多的验证。(只有一个人在开发?)分片的数目不能动态调整,只能在初始化索引的时候指定(跟 HBase 不一样的地方)

七 Lucandra ( https://github.com/tjake/Lucandra )

  1. 说明:基于 Lucene,索引存在 cassandra 数据库中
  2. 优点:参考 cassandra 的优点
  3. 缺点:参考 cassandra 的缺点。另外,这只是一个 demo,没有经过大量验证

八 HBasene ( https://github.com/akkumar/hbasene )

  1. 说明:基于 Lucene,索引存在 HBase 数据库中
  2. 优点:参考 HBase 的优点
  3. 缺点:参考 HBase 的缺点。另外,在实现中,lucene terms 是存成行,但每个 term 对应的 posting lists 是以列的方式存储的。随着单个 term 的 posting lists 的增大,查询时的速度受到的影响会非常大

转自:http://www.cnblogs.com/ajian005/archive/2011/06/01/2753824

相关问答

更多

电脑常见硬件故障的检测及解决方案

硬盘 能做能进系统就好 坏道那些不用管 一般检测方法就是检测硬盘坏道 主板 用好的cpu跟内存 裸奔一下看看 能亮就说明好着 反正 你用排除法 一个部件 一个部件 排除就行 简单的

自定义的.NET应用程序搜索解决方案需要[closed](Custom .NET Application Search Solution Needed [closed])

结帐Lucene.Net 。 Lucene.Net是使用Microsoft .NET Framework的C#和.NET平台的Java Lucene搜索引擎的源代码,类每类,API每API和算法端口。 Checkout Lucene.Net. Lucene.Net is a source code, class-per-class, API-per-API and algorithmatic port of the Java Lucene search engine to the C# and . ...

如何评估托管全文搜索解决方案?(How to evaluate hosted full text search solutions?)

Websolr提供了一个基于云的Solr与控制面板。 在撰写本文时,它是私人测试版,但您可以通过Heroku获得该服务。 另一个托管的Solr服务是PowCloud ,也是私有测试版,似乎提供了强大的Wordpress集成。 SolrHQ :提供托管Solr解决方案的另一个测试版服务,具有Joomla和Wordpress集成功能。 Acquia Search为Drupal站点提供Solr集成。 如果您决定构建自己的EC2实例,则SolrOnAmazonEC2 wiki页面可能会有用。 或者您可以获 ...

组合总和深度优先搜索解决方案(Combinations sum depth first search solution)

我认为这与你要做的事情是一致的: def solve(target, sum, candidates, answer): if sum == target: print answer return if len(candidates) == 0 or sum > target: return first = candidates[0] count = candidates.count(first); an ...

距离+关键字搜索解决方案(Distance + keyword search solution)

我会推荐存储数据的Entity Attribute Value或EAV模型。 http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model (这就是Wordpress Posts和Post Meta的工作方式)。 所以假设表格如下: ENTITY_TABLE: (id,title,author,content,date_created,date_modified) ATTRIBUTE_TABLE: (id, en ...

类似图像搜索解决方案(similar images search solution)

使用pHash计算所有图像的感知哈希值(不是每个组合的交叉积), 然后对该哈希进行排序(同时保持对图像的引用), 然后定义您定义为“图片是等效的”感知哈希的临界值, 然后用对要保留的一张图片的引用替换对等效图片的引用。 Use pHash to calculate the perceptual hash of all your images (not of the crossproduct of each combination), then sort that hash (while keepi ...

Lucene.NET和Facete搜索解决方案(Lucene.NET & Facete Search Solution)

BitArray表示命中。 每个1都有一个索引,它等于文档ID 所以1001001意味着索引中位置0,3和6的文档与您的搜索匹配。 你只需要从lucene索引中检索它们。 var searcher = new IndexSearcher(indexPath); // get document at position 0 var doc = searcher.Doc( 0 ); The BitArray represents hits. Each 1 has an index, that is ...

Python的简约地理空间搜索解决方案(Minimalistic geospatial searching solution for Python)

身材匀称似乎是一个很好的解决方案。 它的描述似乎符合您的要求: [ Shapely ]它允许你使用Python在数据库的上下文之外做PostGIS-ish的东西。 它基于GEOS ,这是一个广泛使用的C ++库。 这是文档的链接 Shapely seems to be a good solution. Its description seems to correspond to what you're looking for : [Shapely] It lets you do PostGIS-i ...

针对具有共享内容库的大型用户群的云搜索解决方案(Cloud search solution for a large user base with libraries of shared content)

我想其中任何一个都会处理项目数量。 确定搜索群集的大小时,还应考虑每秒的请求数。 任何一台发动机都会支持它并提供快速相关的结果。 Elasticsearch由Apache Lucene提供支持,而Cloudsearch则基于Solr(由Lucene提供支持!) 我认为最终的考虑归结为维护问题。 从我在这里收集到的 , 在 这里 , 在 这里 ,Cloudsearch更容易,因为缩放是自动的。 我认为这个功能或服务从第一天开始就不会为数百万用户提供服务,因此我建议您在成长时从小规模开始按需扩展。 C ...