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

时间:2015-03-03 11:59:17

标签: lucene lucene.net azure-queues

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

我想用Lucene .net索引项目。

启动IndexWriter,调用Optimize()并在每个击中队列的项目上处理它需要花费太多时间。感觉我做错了。

我希望这些项目能够尽快为搜索做好准备。

对于许多线程都有一个IndexWriter可以吗?

我是否需要调用Optimize()或者从来没有调用它,或者在每天运行一次的单独进程(例如)上调用它?

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

在处理IndexWriter之前,使用IndexWriter添加的新项目是否可用于搜索?

谢谢。

1 个答案:

答案 0 :(得分:4)

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