我们需要在我们的产品目录管理软件中集成搜索引擎。该目录预计将超过4-5百万。关系数据的记录分布在几个表中。我们的开发平台是Asp.Net 3.5,我们已经对Lucene做了一些初步的工作,发现它很好。然而,我们刚刚了解了Solr并且正在寻找一些实用技巧来比较Lucene& Solr从实施,时间表,定期维护,性能,功能角度出发。任何指导或指示都会非常有用。谢谢。
答案 0 :(得分:41)
Lucene的:
Apache Lucene是一个完全用Java编写的高性能,功能齐全的文本搜索引擎库。它适用于几乎所有需要全文搜索的应用程序
Solr的:
Solr是一个基于Lucene Java搜索库的开源企业搜索服务器,具有XML / HTTP和JSON API,突出显示,分面搜索,缓存,复制,Web管理界面......
基本上,Lucene嵌入在Solr中,纯粹是一个全文搜索库,其目的是嵌入到项目中,为其提供全文搜索功能。 Solr具有更多功能和管理功能,允许搜索结构化数据,无需编写任何自定义代码,从CSV文件加载数据,容忍解析用户输入,分面搜索,突出显示结果中的匹配文本,以及检索各种搜索结果格式(XML,JSON,...)。 检查Solr features page,看看是否有任何功能与您的项目相关。
答案 1 :(得分:18)
我必须同意安德鲁克莱格的观点。我想当许多Java Developer类型看Lucene vs Solr时,Lucene看起来更友好,因为它只是一个库(POJJ:Plain Old Java Jar!),就像任何其他库一样,它看起来很容易嵌入,而不是复杂性将Solr作为一个独立的进程,通过复杂的HTTP进行通信。
但是,我认为对于几乎所有的搜索用例,Solr都是正确的方法。因为搜索中的大部分复杂性不是直接的初始集成,而是在调整搜索的模糊区域,扩展以满足需求,并维护从开发人员中心世界跨越到系统世界的索引。 Solr很好地处理了所有这些需求。
答案 2 :(得分:6)
就像dcruz所说,Solr无论如何都使用Lucene,所以这不是一个有效的比较。
Lucene是用于构建搜索应用程序的工具包,Solr是一个使用Lucene构建的搜索应用程序。
IMO你会疯狂而不是使用Solr,因为它为你提供了许多你必须自己编写的“管道” - 就像一个可配置的数据导入处理程序从您的RDBMS或XML存储库中提取数据。
另外,它为您提供了一个网络管理界面和其他铃声和口哨。
答案 3 :(得分:2)
要考虑的一件事是在混合这两种环境(Java / .NET)时设置应用程序有多困难。如果使用Lucene.NET库,则可以限制所需的外部依赖项安装,从而简化部署。
另一件需要考虑的事情是你需要 Solr提供的额外服务吗?一个(另一个)Web管理界面可能很棒,但它可以扩展您的风险范围。放下Java和其他服务意味着更多的补丁管理。如果您坚持使用.NET,那么您的补丁策略可以是标准的Windows更新模型。
当然使用Lucene.NET滚动你的实现会有自己的开发和维护成本,但根据我的经验,它是直接的,易于使用。
答案 4 :(得分:1)
我们和你一样处于同样的境地。不幸的是,我没有直接参与评估过程,但最后我们将使用Solr与Lucene集成。
主要优势是dcruz描述的各种格式。因此,您可以查询Solr-Consumer并将搜索结果作为XML数据返回,这些数据可以轻松解析并显示在网页上。
答案 5 :(得分:1)
让我转移一下您的注意力:您是否准备好改变产品的架构? Lucene和Solr都是用Java实现的。因此,您最终将运行另一个用于托管它的Web容器(因此可能会失去平台纯度)。虽然Lucene被移植到.NET(Lucene.NET project),但Solr并不是我所知道的。如果您碰巧使用SQL Server(很可能,考虑到您的平台),您可能会考虑使用SQL Server全文搜索 - 它具有几乎相同的功能(不像Lucene / Solr那样功能丰富,但无论如何)通常(在大多数情况下)更容易融入现有应用程序。除此之外,您还可以从简化的维护(它与您的数据库一起)中受益,并且也可以保持在单一平台内。