有人使用 Lucene.NET 而不是使用 sql server 自带的全文搜索吗?
如果是这样,我会对您如何实现它感兴趣。
例如,您是否编写了一个每小时查询数据库然后将结果保存到 lucene.net 索引的 Windows 服务?
最佳答案
是的,我已经将它用于您所描述的用途。我们有两种服务 - 一种用于读取,一种用于写入,但这只是因为我们有多个读取器。我确信我们可以仅使用一项服务(编写器)并将阅读器嵌入到网络应用程序和服务中来完成。
我使用 lucene.net 作为通用数据库索引器,所以我得到的基本上是 DB id(用于索引电子邮件),而且我还使用它来获取足够的信息来填充搜索结果等无需接触数据库。在这两种情况下它都工作得很好,尽管 SQL 可能会有点慢,因为你几乎必须获取一个 ID,选择一个 ID 等。我们通过创建一个临时表(其中只有 ID 行)来解决这个问题从文件(这是 lucene 的输出)批量插入,然后加入消息表。速度快了很多。
Lucene 并不完美,您必须跳出关系数据库的框框进行思考,因为它完全不是完美的,但它非常擅长它的功能。值得一看,而且据我所知,它不会像 MS SQL 的 FTI 那样出现“哎呀,抱歉,您需要再次重建索引”的问题。
顺便说一句,我们正在处理 20-5000 万封电子邮件(以及大约 100 万个独特附件),我认为总共大约有 20GB 的 lucene 索引,以及 250+GB 的 SQL 数据库 + 附件。
至少可以说,性能非常棒 - 只要确保您考虑并调整您的合并因素(当它合并索引段时)。拥有多个段没有问题,但如果您尝试合并两个段,每个段都有 100 万个项目,并且您有一个观察者线程,如果花费太长时间,它会终止进程,则可能会出现大问题... ..(是的,这让我们很恼火一段时间)。因此,请保持每个事物的最大文档数较低(即,不要像我们一样将其设置为 maxint!)
编辑 Corey Trager 记录了如何在 BugTracker.NET 中使用 Lucene.NET here 。
关于sql-server - 使用 SQL Server 配置 Lucene.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37059/