search引擎 – Lucene或Solr

我们需要将search引擎集成到我们的产品目录pipe理软件中。 目录预计有4-5百万。 关系数据logging遍布多个表格。 我们的开发平台是Asp.Net 3.5,我们已经在Lucene上做了一些前期的工作,发现它很好。 然而,我们刚刚了解到Solr,并且正在寻找一些实用的技巧来比较Lucene和Solr的实现,时间线,定期维护,性能,function的angular度。 任何指导或指针都会非常有帮助。 谢谢。

Lucene的:

Apache Lucene是一个高性能,全function的文本search引擎库,完全用Java编写。 它是适用于几乎所有需要全文search的应用程序的技术

Solr的:

Solr是一个基于Lucene Javasearch库的开源企业search服务器,具有XML / HTTP和JSON API,高亮search,分面search,caching,复制,Webpipe理界面和…

实质上,Luceneembedded到Solr中,纯粹是一个全文search库,其目的是embedded项目中,使其具有全文searchfunction。 Solr具有更多的function和pipe理function,允许search结构化数据,无需编写任何自定义代码,从CSV文件加载数据,容忍用户input分析,分面search,突出显示结果中的匹配文本,以及检索各种search结果格式(XML,JSON,…)。 检查Solrfunction页面 ,看看是否有任何function与您的项目相关。

我不得不同意安德鲁·克莱格。 我认为,当很多Java Developertypes看Lucene VS Solr时,Lucene看起来更友好,因为它像一个库(POJJ:Plain Old Java Jar!),就像任何其他库一样,看上去很容易embedded,而复杂性站立Solr作为一个单独的过程,通过复杂的HTTP进行通信。

不过,我认为对于几乎所有的search用例来说,Solr都是正确的方法。 由于search中的大部分复杂性不是直接的初始集成,而是在调优search的模糊区域,扩展以满足需求,并维护从开发人员中心世界跨越到系统世界的索引。 Solr很好地处理所有这些需求。

就像dcruz说的那样,Solr无论如何都使用Lucene,所以这不是一个有效的比较。

Lucene是构buildsearch应用程序的工具包,Solr是使用Lucene构build的search应用程序。

国际海事组织(IMO)你会疯狂地使用Solr,因为它为你提供了许多你不得不自己编写的“pipe道”,就像一个可configuration的数据导入处理程序,从你的RDBMS或XML存储库中抽取数据。

再加上它给你一个networkingpipe理界面和其他花里胡哨的东西。

有一点需要考虑的是在混合这两种环境(Java / .NET)时设置应用程序是多么困难。 如果使用Lucene.NET库,则可以限制所需的外部依赖性安装,从而简化部署。

另一个需要考虑的是你需要 Solr提供的额外function吗? 一个(其他的)networkingpipe理界面可能很好,但它扩展了你的风险范围。 放下Java和其他服务意味着更多的补丁pipe理。 如果你坚持.NET,只有你的补丁策略可以成为标准的Windows更新模型。

当然,使用Lucene.NET来滚动你的实现将会产生自己的开发和维护成本,但是根据我的经验,它是非常简单易用的。

我们和你们一模一样 不幸的是,我并没有直接参与评估过程,但最终我们将使用与Lucene集成的Solr。

主要优点是所描述的dcruz格式多种多样。 因此,您可以查询您的Solr-Consumer,并将您的search结果作为可轻松parsing并显示在网页上的XML数据取回。

让我转移一下你的焦点:你准备改变你的产品架构吗? Lucene和Solr都是用Java实现的。 所以你最终将运行另一个networking容器来托pipe它(因此将失去平台纯度,所以说)。 当Lucene被移植到.NET( Lucene.NET项目 )时,Solr并不如我所知。 如果碰巧使用SQL Server(很可能考虑到你的平台),你可能会考虑使用SQL Server全文search – 它具有几乎相同的特性(不像Lucene / Solr那么function丰富) (在大多数情况下)更容易并入到现有的应用程序中。 除此之外,您还可以从简化的维护(它与您的数据库一起)以及在单一平台中受益。