lucene.net - 如何非常频繁地更新索引?

lucene.net - how to update an index very frequently?

我有一个 Azure WebJob,它有一个接收要处理的项目的队列。每秒可以处理很多项目。队列同时处理大约 20 个项目。

我想用 Lucene .net 为项目编制索引。

启动 IndexWriter、调用 Optimize() 并将其处理到每个到达队列的项目上需要花费太多时间。感觉自己做错了

我希望这些项目尽快可供搜索。

多线程一个IndexWriter可以吗?

我需要调用 Optimize() 还是永远不调用它,或者在每天运行一次的单独进程中调用它(例如)?

如果我只有一个 IndexWriter 并且从不处理它(程序退出时除外),我会在缓冲区中卡住新项目吗?

用IndexWriter添加的新item在处理IndexWriter之前是否可以搜索到?

谢谢。

  1. IndexWriter 是线程安全的,从不同的线程调用是安全的。
  2. 从不调用优化是可以的。 (如果默认设置不适合您,您可以编写自定义合并策略。)
  3. 您将通过调用提交将所有文档刷新到磁盘。没有必要处理你的作家。重新使用它。
  4. 一旦 reader 看到文档,就可以对其进行搜索。这发生在您提交您的作者并重新打开您的 reader 之后。您可以通过使用近实时 (NRT) 搜索从 IndexWriter.OpenReader.
  5. 中获取 reader 来在提交之前阅读它们