搜索引擎 - Lucene 或 Solr

Posted

技术标签:

【中文标题】搜索引擎 - Lucene 或 Solr【英文标题】:Search Engine - Lucene or Solr 【发布时间】:2010-11-26 22:02:37 【问题描述】:

我们需要在产品目录管理软件中集成搜索引擎。该目录预计将超过 4-5 百万。具有关系数据的记录分布在多个表中。我们的开发平台是 Asp.Net 3.5,我们在 Lucene 上做了一些初步的工作,发现它很好。然而,我们刚刚了解了 Solr,并正在寻找一些实用的技巧来比较 Lucene 和 Solr 从实施、时间线、定期维护、性能、功能角度。任何指导或指示都会非常有帮助。谢谢。

【问题讨论】:

【参考方案1】:

Lucene:

Apache Lucene 是一个完全用 Java 编写的高性能、功能齐全的文本搜索引擎库。这是一项几乎适用于任何需要全文搜索的应用程序的技术

解决方案:

Solr 是一个基于 Lucene Java 搜索库的开源企业搜索服务器,具有 XML/HTTP 和 JSON API、命中突出显示、分面搜索、缓存、复制、Web 管理界面和...

从本质上讲,Lucene 嵌入在 Solr 中,纯粹是一个全文搜索库,目的是嵌入到项目中,为它们提供全文搜索功能。 Solr 具有更多功能和管理功能,允许搜索结构化数据而无需编写任何自定义代码、从 CSV 文件加载数据、容忍解析用户输入、分面搜索、突出显示结果中的匹配文本以及检索各种搜索结果格式(XML,JSON,...)。 检查Solr features page,看看是否有任何功能与您的项目相关。

【讨论】:

我已经使用 Lucene 创建了我的索引。 Solr 仍然可以使用这些索引进行搜索查询吗? 在大多数情况下,这取决于。它不是自动的,您必须确保 solr 具有与 Lucene 索引中相同的字段映射。欲了解更多信息,请查看:nabble.com/Using-Lucene-index-in-Solr-td4983079.html @dcruz,你有没有使用 Solr 中的 DataImportHandler 的经验,它可以根据一些配置文件自动从数据库中导入数据。它是否像听起来一样流畅,或者是否隐藏了任何陷阱? 对不起 =( 两年前我在 Solr 工作过,我真的不记得实现细节了。 使用 Solr 就是以正确的方式使用 Lucene,因为 Solr 是 Lucene 开发者的最佳实践。【参考方案2】:

我们和你的情况完全一样。不幸的是,我没有直接参与评估过程,但最后我们将使用与 Lucene 集成的 Solr。

主要优点是 dcruz 描述的多种格式。因此,您可以查询您的 Solr-Consumer 并将您的搜索结果作为 XML 数据返回,这些数据可以很容易地解析并显示在网页上。

【讨论】:

【参考方案3】:

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

Lucene 是一个用于构建搜索应用的工具包,Solr 是一个使用 Lucene 构建的搜索应用。

IMO 你会疯的使用 Solr,因为它为你提供了很多“管道”,否则你必须自己编写——比如一个可配置的数据导入处理程序从您的 RDBMS 或 XML 存储库中提取数据。

此外,它还为您提供 Web 管理界面和其他花里胡哨。

【讨论】:

我都使用过(在 asp.net 中),solr 即易于设置和维护。使用 lucene.net,将需要更多的努力。另一方面,如果你需要一些 solr 不提供开箱即用的东西(如果你不懂 java)。【参考方案4】:

我必须同意安德鲁·克莱格的观点。我认为当许多 Java 开发人员类型查看 Lucene 与 Solr 时,Lucene 看起来更友好,因为它只是一个库(POJJ:Plain Old Java Jar!),就像任何其他库一样,它看起来很容易嵌入,而不是复杂的将 Solr 作为一个单独的进程,通过复杂的 HTTP 进行通信。

但是,我认为对于几乎所有搜索用例,Solr 都是正确的方法。因为搜索中的大部分复杂性不是直接的初始集成,而是在调整搜索、扩展以满足需求以及维护从以开发人员为中心的世界到系统世界的索引的模糊领域。 Solr 很好地处理了所有这些需求。

【讨论】:

刚刚订购了您的书 - Solr 1.4 Enterprise Search 很高兴听到这个消息!让我知道你喜欢它! @Eric,与此同时,你能给我一些 DataImportHandler 的备忘单吗?它可以配置为从 SQL 服务器数据库导入数据。 @Vikram,我刚看到你的评论,这本书是否按照你需要的方式覆盖了 DIH? 很遗憾,我还没有收到这本书。它现在应该会到达......【参考方案5】:

让我稍微转移一下你的注意力:你准备好改变你的产品架构了吗? Lucene 和 Solr 都是用 Java 实现的。因此,您最终将运行另一个 Web 容器来托管它(因此可以说会失去平台纯度)。虽然 Lucene 被移植到 .NET (Lucene.NET project),但据我所知,Solr 并不是这样。如果您碰巧使用 SQL Server(考虑到您的平台,这很可能),您可能会考虑使用 SQL Server 全文搜索 - 它具有几乎相同的功能(不像 Lucene/Solr 那样功能丰富,但无论如何)并且通常(在大多数情况下)更容易合并到现有应用程序中。除此之外,您还受益于简化的维护(它与您的数据库一起提供)并保持在单一平台内。

【讨论】:

SQL Server FTS 方式落后于 Lucene 和 Solr 我并不是说它是相当的。但是使用 SQL Server FTS 可以让您更快/更轻松地交付解决方案,并且您将停留在平台的边界内。前段时间我们面临同样的选择:要么继续使用 SQL Server FTS,要么开始使用 Solr。我们最终选择了 Solr,这就是为什么我可以比较这两个功能以及将它们放入您的应用程序所需的工作量。但无论如何,每个人都会做出自己的决定。 @Alex,您是否使用 DataImportHandler 来配置从 SQL 服务器导入 Solr 的数据? @Alex,感谢您的建议。我们已经实施了 SQL FTS 以实现快速周转,并且拥有比 SQL 查询更好的东西。但是,我们也在并行开发 SOLR 以获得长期解决方案。【参考方案6】:

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

要考虑的另一件事是您是否需要 Solr 提供的附加功能? A(其他)Web 管理界面可能很棒,但它扩展了您的风险范围。放下 Java 和其他服务意味着更多的补丁管理。如果您坚持使用 .NET,则只有您的补丁策略可以是标准的 Windows 更新模型。

当然,使用 Lucene.NET 滚动您的实现会产生其自身的开发和维护成本,但根据我的经验,它是直截了当且易于使用的。

【讨论】:

以上是关于搜索引擎 - Lucene 或 Solr的主要内容,如果未能解决你的问题,请参考以下文章

Solr搜索引擎入门知识汇总

在Lucene或Solr中实现高亮的策略

在Lucene或Solr中实现高亮的策略

Solr基于Lucene实现搜索引擎

lucene和solr的区别

solr和lucene是什么关系