2008-08-31 138 views
58

有没有人使用Lucene.NET,而不是使用SQL Server自带的全文搜索?使用SQL Server配置Lucene.Net

如果是这样,我会对如何实现它感兴趣。

你有没有例如写一个windows服务,每小时查询数据库,然后将结果保存到lucene.net索引?

回答

57

是的,我已经用它来描述你正在描述的内容。我们有两种服务 - 一种用于阅读,一种用于书写,但仅仅是因为我们有多个阅读器。我相信我们可以用一项服务(作者)完成它,并将读者嵌入到网络应用程序和服务中。

我已经使用lucene.net作为通用数据库索引器,所以我回到基本数据库ID(索引电子邮件),我也用它来获取足够的信息来填充搜索结果或这样不需要触摸数据库。在这两种情况下,它都很好用,因为SQL可能会变得很慢,因为你几乎必须获得一个ID,选择一个ID等等。我们通过创建一个临时表(只有ID行)和从文件(这是lucene的输出)批量插入,然后加入到消息表中。速度要快得多。

Lucene并不完美,你必须在关系数据库框外思考一下,因为它完全不是一个,但它非常擅长它。值得一看,而且我被告知,MS SQL的FTI没有“哎呀,对不起,你需要再次重建你的索引”问题。顺便说一句,我们正在处理200-500万个电子邮件(和大约100万个独立附件),总共大约20GB的lucene索引,以及250 + GB的SQL数据库+附件。

表现太棒了,至少可以说 - 只要确保您考虑并调整合并因素(合并索引段时)即可。有多个细分市场没有问题,但如果您尝试合并两个细分市场中有1mil项目的细分市场,则会出现BIG问题,并且您有一个观察器线程,如果花费时间太长,则会导致流程终止。 ..(是的,这踢了我们的屁股一段时间)。因此,请保持每件东西的最大文件数量不足(即,不要像我们那样将它设置为maxint)。

编辑Corey Trager记录了如何在BugTracker.NET中使用Lucene.NET here

+1

我还使用Lucene.NET为Amazon SimpleDB的Simple Savant库添加了全文索引支持。这里描述的体系结构如下:http://simplesavant.codeplex.com/wikipage?title=Full-Text%20Indexing&referringTitle=Documentation – 2010-02-28 01:38:25

2

我还没有做到对数据库的是,你的问题是有点开放。

如果你想搜索一个数据库,并可以选择使用Lucene,我也猜测你可以控制何时将数据插入数据库。 如果是这样,几乎没有理由通过轮询db来确定是否需要重新索引,只需插入索引,或创建一个可用于告诉lucene索引的队列表。

我认为我们不需要另一个对它做什么都不知道的索引器,并且每次重新索引或者浪费资源。

1

我使用Lucene.NET和MySQL。我的做法是将DB记录的主键与索引文本一起存储在Lucene文档中。在伪代码,它看起来像:

  • 存储记录:

    插入文本,其他数据表
    获得最新插入的ID
    创建Lucene的文档
    放(ID,文本)为Lucene的文件 更新Lucene索引

  • 查询
    搜索Lucene索引
    以供存储记录的ID在结果中的负载数据的每个Lucene的文档从DB

只是要注意,我从Lucene的切换到Sphinx由于其卓越的性能

+0

Aku,通过这个实现,你如何管理数据的更新?你是否删除并重新创建Lucene索引文件?你安排重新索引还是实时?我问这些问题是为了更好地理解我是否应该使用它。谢谢,deadbug。 – deadbug 2008-10-16 05:45:19

2

我已经使用lucene.net也作为因为使用索引分发和设置备用机器比数据库更容易,它只是一个文件系统副本,您可以在一台机器上编制索引,并将新文件复制到其他机器以分发索引。所有的搜索和细节都在lucene索引中显示,数据库仅用于编辑。这种设置已被证明是满足我们需求的非常可扩展的解决方案。

关于sql server和lucene之间的区别,sql server 2005全文搜索的主要问题是服务与关系引擎分离,因此在全文结果和关系之间进行连接,排序,聚合和过滤列在性能方面非常昂贵,Microsoft声称这个问题已经在sql server 2008中解决了,整合了关系引擎中的全文搜索,但是我没有对它进行测试。他们还使整个全文搜索变得更加透明,在以前的版本中,词干,停用词和索引的其他部分就像一个黑匣子,难以理解,在新版本中更容易看到它们是如何工作的。根据我的经验,如果sql server满足你的要求,它将是最简单的方法,如果你期望有很多增长,复杂的查询或需要对全文搜索进行大控制,你可以考虑使用lucene因为它会更容易扩展和个性化。