0

我每天更新一个 lucene 索引。我的总体策略是:

  1. 查找数据库中自上次索引生成以来修改的所有对象。
  2. 为这些对象创建新的 tmp-index。(旧索引仍然可用)
  3. 使用 IndexWriter.deleteDocuments(Term) 从旧索引中删除所有新的索引文档(它们在 tmp-index 中)
  4. 使用 IndexWriter.addIndexes(...) 合并旧索引和 tmp-index

我在 lucene wiki 中发现:Lucene 中没有直接更新过程... 我还发现在 lucene 4.1.0 文档中:可以使用 updateDocument 更新文档...

我已经尝试过 IndexWriter.updateDocument(Term, Document) 但随后使用过滤器执行搜索我从我的一种方法中获得了 NPE,当我按照 1-4 中的描述更新索引时不会发生这种情况。有没有人遇到过类似的问题?你如何更新你的索引?

4

2 回答 2

1

我所做的基本上是这样的:

我保留了一个持久的 IndexReader/Readers,这将保持它自创建以来的状态。

我再次开始删除并创建所有文档。我想我只是做了一个 deleteAll() 然后重新创建它们 (addDocument())。

我承诺,这将激活所有这些更改。

我删除了我拥有的所有 IndexReader,因此下次系统请求 Reader 时,它将创建它并将其存储以供后续请求使用。

updateDocument 基本上是一个删除/创建,afaik。

于 2013-01-30T15:17:40.657 回答
0

在使用 IndexWriter 更新索引时,您可能希望使用 aSearcherManager来获取新的 IndexSearchers。我认为不需要使用临时索引?

于 2013-01-31T08:05:37.983 回答