lucene.net - 如何非常频繁地更新索引?
lucene.net - how to update an index very frequently?
我有一个 Azure WebJob,它有一个接收要处理的项目的队列。每秒可以处理很多项目。队列同时处理大约 20 个项目。
我想用 Lucene .net 为项目编制索引。
启动 IndexWriter、调用 Optimize() 并将其处理到每个到达队列的项目上需要花费太多时间。感觉自己做错了
我希望这些项目尽快可供搜索。
多线程一个IndexWriter可以吗?
我需要调用 Optimize() 还是永远不调用它,或者在每天运行一次的单独进程中调用它(例如)?
如果我只有一个 IndexWriter 并且从不处理它(程序退出时除外),我会在缓冲区中卡住新项目吗?
用IndexWriter添加的新item在处理IndexWriter之前是否可以搜索到?
谢谢。
- IndexWriter 是线程安全的,从不同的线程调用是安全的。
- 从不调用优化是可以的。 (如果默认设置不适合您,您可以编写自定义合并策略。)
- 您将通过调用提交将所有文档刷新到磁盘。没有必要处理你的作家。重新使用它。
- 一旦 reader 看到文档,就可以对其进行搜索。这发生在您提交您的作者并重新打开您的 reader 之后。您可以通过使用近实时 (NRT) 搜索从
IndexWriter.OpenReader
. 中获取 reader 来在提交之前阅读它们
我有一个 Azure WebJob,它有一个接收要处理的项目的队列。每秒可以处理很多项目。队列同时处理大约 20 个项目。
我想用 Lucene .net 为项目编制索引。
启动 IndexWriter、调用 Optimize() 并将其处理到每个到达队列的项目上需要花费太多时间。感觉自己做错了
我希望这些项目尽快可供搜索。
多线程一个IndexWriter可以吗?
我需要调用 Optimize() 还是永远不调用它,或者在每天运行一次的单独进程中调用它(例如)?
如果我只有一个 IndexWriter 并且从不处理它(程序退出时除外),我会在缓冲区中卡住新项目吗?
用IndexWriter添加的新item在处理IndexWriter之前是否可以搜索到?
谢谢。
- IndexWriter 是线程安全的,从不同的线程调用是安全的。
- 从不调用优化是可以的。 (如果默认设置不适合您,您可以编写自定义合并策略。)
- 您将通过调用提交将所有文档刷新到磁盘。没有必要处理你的作家。重新使用它。
- 一旦 reader 看到文档,就可以对其进行搜索。这发生在您提交您的作者并重新打开您的 reader 之后。您可以通过使用近实时 (NRT) 搜索从
IndexWriter.OpenReader
. 中获取 reader 来在提交之前阅读它们