Lucene的IndexWriter澄清

时间:2012-01-31 16:44:11

标签: lucene lucene.net

为了找到我们项目中的错误,我发现自己几乎没有关于Lucene索引API的问题而没有回答: 第一个与以下代码段相关:

IndexWriter writer = //open an index for writings.
// ... do some heavy updates (inserts and deletes) to the index using 'writer'

IndexReader reader = writer.GetReader();
long[] idsArray = Field_Cache_Fields.DEFAULT.GetLongs(reader, "ID_Field");  
//under the assumption that ALL indexed documents contain field with the name "ID_Field".

Lucene的API是否承诺我获得的读者总是会得到更新的,即使是未经修改的索引?只是为了确保我的答案是清楚的:读者可以看到每个已删除的文档WONT,并且每个添加的文档都将是..

第二个问题与下一个片段有关:

IndexWriter writer = //open an index for writing, but dont change a thing - just commit meta data.
writer.Commit["Hello"] = "World";
writer.Commit();

它是否承诺将元数据提交给索引,尽管我打开它时没有对索引进行实际更改?

在这两个问题中,我都很高兴知道API的含义,以及是否有人知道Lucene特有的问题(任何错误?).Net 2.9.2

谢谢你们!

1 个答案:

答案 0 :(得分:1)

第一个问题:是的

来自doc:

  

专家:返回一个只读读者,涵盖索引的所有已提交和未提交的更改。这提供了“近实时”搜索,因为在IndexWriter会话期间所做的更改可以快速地进行搜索,而无需关闭编写器或调用#commit。   请注意,这在功能上等同于调用{#commit}然后使用IndexReader #open来打开新的阅读器。但是这种方法的时间应该更快,因为它避免了可能代价高昂的#commit。