Lucene.Net最佳实践

什么是使用Lucene.Net的最佳做法? 或者我在哪里可以find一个很好的lucene.net使用示例?

如果你要和Lucene合作,我会买一本从A到Z的好书。Lucene的学习曲线非常陡峭(在我看来)。 这不仅仅是知道如何search这个重要的东西 – 这也是关于索引的 。 做一个基本的search是很容易的,但是创build一个包含数百万条数据logging的索引,并且仍然能够快速search这个索引是可能的,但是非常困难。 没有任何教程可以帮助你学习。

我推荐Michael McCandless,Erik Hatcher和OtisGospodnetić的“ Lucene in Action”第二版 。 虽然它是为Lucene而不是Lucene.NET编写的,但是这不应该成为一个问题,因为termonology和api基本上是一样的。

不过,如果你只是想快速尝试,你可以阅读这个网站 。 这个名字说明了一切 :-)

当数据量很大时,我们经常使用Lucene.NET,并且需要有超快的读取响应时间。 我们通常将数据粘贴到需要search的关键字中,以便将结果映射回具有剩余细节的数据库表。 这样可以让我们search一个用户(在我们的例子中)检查他们过去的参与。 这不仅仅是一个用户名search,而是一个遍历各种细节的search,试图找出是否有该用户的任何其他实例(尽pipe以不同的forms)。 一个例子是,我们寻找用户ID(来自一个系统),他们的ID来自另一个系统,可能是来自供应商系统的ID,闪存cookie GUID,站点cookie GUID等。当我们find一个标识符为其他用户实例查找该标识符的其他实例。 这使得我们可以将用户login到许多系统中的一个(因为他们参与任何系统只允许每24小时一次)。 在SQL这个alogrithm(我含糊不清)将永远! 在Lucene.NET中,它不到一秒钟。 Lucene比SQL Server有更多的search可能性。 它吸引的是写入或更新您的索引。 这通常是作为一个工作…一次完成。 但是,如果您需要写入索引来实时更新它,则需要编写一些巧妙的代码以确保它以locking的方式写入(请考虑使用singleton排队),否则代码将重叠并爆炸!

我在本书( ASP.NET社交networking )中介绍了Lucene.NET的用法,您可以在这里find很多帮助。

有一篇很好的文章解释了Lucene.NET实现: http ://www.ifdefined.com/blog/post/2009/02/Full-Text-Search-in-ASPNET-using-LuceneNET.aspx

Lucene.NET的麻烦在于它没有像标准(Java)Lucene这样的活跃的社区,所以它就像总是有效地运行旧版本的Lucene一样。 虽然我们更喜欢.NET,但是我们决定使用Java版本的Lucene。 如果您使用Solr,则很容易整合。

“Lucene在行动”是学习如何索引和如何search的最好的书。 它甚至涵盖了高级search技术和编写自定义分析器。 尽pipe这本书是针对Java的…我已经通过使用本书在.net中实现了search和索引。

Simon Green关于如何设置Lucene.Net来处理他的NHibernate实现有一个很好的三部分系列。 第一部分介绍这个系列 。 第二部分和第三 部分讨论技术细节。

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