Lucene.Net 最佳实践

Posted

技术标签:

【中文标题】Lucene.Net 最佳实践【英文标题】:Lucene.Net Best Practices 【发布时间】:2010-11-03 09:18:28 【问题描述】:

使用 Lucene.Net 的最佳实践是什么?或者我在哪里可以找到一个好的 lucene.net 使用示例?

【问题讨论】:

【参考方案1】:

如果您打算使用 Lucene,我会购买一本从头到尾涵盖它的好书。Lucene 的学习曲线非常陡峭(在我看来)。不仅知道如何搜索您的内容很重要 - 它还涉及索引它。进行基本搜索很容易,但是创建一个包含数百万条数据记录并仍然能够对其进行闪电般快速搜索的索引是可能的,但非常困难。没有教程可以教你。

我会推荐 Michael McCandless、Erik Hatcher 和 Otis Gospodnetić 的 Lucene in Action, Second Edition。虽然它是为 Lucene 而不是 Lucene.NET 编写的,但这应该不是问题,因为术语和 api 基本相同。

但是,如果您只是想快速尝试一下,您可以阅读this site。这个名字说明了一切:-)

【讨论】:

我必须查看 Lucene in Action 这本书,我必须同意这是一本很好的单书,可以学习 Lucene 的所有内容!大多数理论概念适用于 Lucene.NET,但代码实现需要一些创造性思维! 我看到 Lucene in Action 的第二版刚刚出版。关于第一版是否更接近或更接近 Lucene.NET 有什么想法吗?【参考方案2】:

当数据量很大并且需要超快的读取响应时间时,我们经常使用 Lucene.NET。我们通常将我们需要搜索的数据以及允许我们将结果映射回具有剩余详细信息的数据库表的键中粘贴。然后,这允许我们搜索用户(在我们的例子中)检查他们过去的参与。这不仅是用户名搜索,而且是迭代各种细节的搜索,试图查找是否存在该用户的任何其他实例(尽管形式不同)。例如,我们查找用户 ID(来自一个系统)、他们来自另一个系统的 ID、可能来自供应商系统的 ID、flash cookie GUID、站点 cookie GUID 等。当我们找到一个标识符时,我们为其他用户实例查找该标识符的其他实例。这使我们能够对进入多个系统之一的用户进行重复数据删除(因为他们每 24 小时只允许他们参与任何系统一次)。在 SQL 中,这个算法(我对此含糊不清)将永远持续下去!在 Lucene.NET 中,它只需不到一秒钟。 Lucene 比 SQL Server 有更多的搜索可能性。它最糟糕的事情是写入或更新您的索引。这通常作为一项工作......一次完成。但是,如果您需要写入索引以实时更新它,您需要编写一些巧妙的代码来确保它以锁定方式写入(考虑使用单例进行排队),否则您的代码将重叠并爆炸!

我在我的书 (ASP.NET Social Networking) 中介绍了 Lucene.NET 的用法,您可以在 here 中找到很多帮助。

【讨论】:

【参考方案3】:

Lucene.NET 的问题在于它没有像标准 (java) Lucene 这样的活跃社区 - 所以它就像总是有效地运行旧版本的 Lucene。尽管我们更喜欢 .NET,但出于这个原因,我们还是决定使用 Java 版本的 Lucene。如果你也使用 Solr,它很容易集成。

【讨论】:

【参考方案4】:

“Lucene in Action”是学习如何索引和如何搜索的最佳书籍。它甚至涵盖了高级搜索技术和编写自定义分析器。尽管这本书是针对 Java 的……我已经使用这本书在 .net 中实现了搜索和索引。

【讨论】:

【参考方案5】:

Simon Green 有一个很好的三部分系列,介绍了他如何设置 Lucene.Net 以使用他的 NHibernate 实现。 Part one introduces the series。 Part two 和 part three 讨论技术细节。

我发现 Lucene.Net 代码示例非常有用,即使我的项目没有使用 NHibernate。

【讨论】:

以上是关于Lucene.Net 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

制作容器镜像的最佳实践

后端日志最佳实践

DAO(数据访问对象)最佳实践 - 我看到的示例同时使用 DAO 和服务对象,这里的最佳实践是啥?

平均堆栈身份验证 - 最佳实践

Activity的最佳实践

Openstack迁移DDH最佳实践