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