我有一个由 3rd 方制作的大 lucene 索引。
我想搜索未编入索引的字段。是否可以使用现在索引的字段重新创建索引?
我假设该字段存储正确吗?如果没有,那你就不走运了。
如果它被存储,你有几个选择,我认为最简单的是:
将所有文档转储为 csv 输出(请参见此处)
将该字段的架构更改为 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();