首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用SQL Server配置Lucene.Net

使用SQL Server配置Lucene.Net
EN

Stack Overflow用户
提问于 2008-08-31 19:53:15
回答 3查看 25.7K关注 0票数 60

有没有人使用Lucene.NET而不是使用sql server附带的全文搜索?

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

例如,您是否编写了一个windows服务,每小时查询一次数据库,然后将结果保存到lucene.net索引中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-08-31 22:11:34

是的,我已经把它用来做你所描述的事情了。我们有两个服务--一个用于读取,另一个用于写入,但这仅仅是因为我们有多个读取器。我确信我们只需要一个服务(写入器)就可以做到这一点,并将阅读器嵌入到web应用程序和服务中。

我使用lucene.net作为一个通用的数据库索引器,所以我得到的基本上是DB id(用于索引电子邮件),我还使用它来获得足够的信息来填充搜索结果或类似的内容,而不需要接触数据库。它在两种情况下都工作得很好,尽管SQL可能会变得有点慢,因为你几乎必须获得一个ID,选择一个ID等等。我们通过创建一个临时表(其中只有ID行)并从一个文件(这是lucene的输出)批量插入,然后连接到message表来解决这个问题。要快得多。

Lucene并不完美,您必须在关系数据库框架之外考虑一下,因为它完全不是关系数据库,但它在它所做的事情上非常非常出色。值得一看,而且,我被告知,它没有MS SQL的FTI所存在的“哦,对不起,您需要重新构建索引”的问题。

顺便说一句,我们正在处理2000-5000万封电子邮件(和大约100万个独特的附件),我想总共有20 20的lucene索引,以及250+GB的SQL数据库+附件。

至少可以说,性能非常好--只要确保你考虑并调整你的合并因素(当它合并索引片段时)。有多个段没有问题,但如果您尝试合并两个段,每个段中有1mil项,并且您有一个监视器线程,如果花费的时间太长,它会杀死进程,这可能会出现大问题。(是的,有一段时间我们被踢烂了)。因此,保持每个事物的最大文档数量较低(即,不要像我们那样将其设置为maxint!)

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

票数 59
EN

Stack Overflow用户

发布于 2008-08-31 20:19:20

我还没有在数据库上这样做,你的问题还没有解决。

如果你想搜索数据库,并且可以选择使用Lucene,我猜你也可以控制何时将数据插入到数据库中。如果是这样的话,就没有理由轮询数据库来找出您是否需要重新索引,只是在您插入时索引,或者创建一个队列表来告诉lucene要索引什么。

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

票数 3
EN

Stack Overflow用户

发布于 2008-10-23 10:00:56

我还使用lucene.net作为存储引擎,因为使用索引分发和设置备用计算机比使用数据库更容易,它只是一个文件系统副本,您可以在一台计算机上建立索引,然后将新文件复制到其他计算机以分发索引。所有的搜索和详细信息都显示在lucene索引中,数据库只是用于编辑。此设置已被证明是一个非常可扩展的解决方案,可以满足我们的需求。

关于sql server和lucene之间的差异,sql server 2005全文搜索的主要问题是服务与关系引擎分离,因此全文结果和关系列之间的连接、排序、聚合和过滤在性能方面非常昂贵,微软声称在sql server 2008中已经解决了这个问题,在关系引擎中集成了全文搜索,但我没有对其进行测试。它们还使全文搜索变得更加透明,在以前的版本中,词干分析器、停用词和索引的其他几个部分就像一个黑匣子,很难理解,而在新版本中,更容易看到它们是如何工作的。

以我的经验,如果sql server满足你的需求,这将是最简单的方式,如果你期望大量的增长,复杂的查询或需要一个全文搜索的大控制,你可能会考虑从一开始就使用lucene,因为它将更容易扩展和个性化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档