更新lucene索引 - 最流行的方式

时间:2013-01-30 15:02:43

标签: java lucene indexing

我每天更新lucene index onec。我的策略一般是:

  1. 查找自上次索引生成以来修改过的DB中的所有对象。
  2. 为这些对象创建新的tmp-index。 (旧索引可用)
  3. 使用IndexWriter.deleteDocuments(Term)从旧索引中删除所有新索引文档(它们位于tmp-index中)
  4. 使用IndexWriter.addIndexes(...)合并旧索引和tmp-index
  5. 我在lucene wiki中发现:There is no direct update procedure in Lucene... 我在lucene 4.1.0 doc:A document can be updated with updateDocument...

    中也发现了这一点

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

2 个答案:

答案 0 :(得分:1)

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

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

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

我提交,这将激活所有这些更改。

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

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

答案 1 :(得分:0)

在使用IndexWriter更新索引时,您可能希望使用SearcherManager来获取新的IndexSearchers。我认为没有必要使用临时索引?