【发布时间】:2013-06-01 01:26:24
【问题描述】:
我有一个由 3rd 方生成的大 lucene 索引。
我想搜索未编入索引的字段。是否可以重新创建索引,该字段现在已编入索引?
【问题讨论】:
我有一个由 3rd 方生成的大 lucene 索引。
我想搜索未编入索引的字段。是否可以重新创建索引,该字段现在已编入索引?
【问题讨论】:
我假设该字段已存储正确?如果没有,那你就不走运了。
如果它被存储,你有几个选择,我认为最简单的是:
将所有文档转储为 csv 输出 (see here)
将该字段的架构更改为 indexed=true
然后重新索引所有这些(csv 输出也可用于更新)
【讨论】:
解决了我自己,只使用一个索引阅读器和一个作家。 我不知道这是否是正确的方法。该字段是一个字符串字段(已存储),因此对于这种情况,它可以正常工作。
IndexReader reader = IndexReader.open(...);
IndexWriter writer = new IndexWriter(...);
for(int i = 0; i < reader.maxDoc(); i++) {
if(reader.isDeleted(i)) continue;
Document d = reader.document(i);
Document d2 = new Document();
for(Field f : (List<Field>)d.getFields()) {
Field f2 = f;
if(f.name().equals(FIELD_NAME))
f2 = new Field(FIELD_NAME, f.stringValue(), Field.Store.YES, Field.Index.NOT_ANALYZED);
d2.add(f2);
}
writer.addDocument(d2);
}
writer.optimize();
writer.close();
【讨论】: