0

我有一个由 3rd 方制作的大 lucene 索引。

我想搜索未编入索引的字段。是否可以使用现在索引的字段重新创建索引?

4

2 回答 2

0

我假设该字段存储正确吗?如果没有,那你就不走运了。

如果它被存储,你有几个选择,我认为最简单的是:

  1. 将所有文档转储为 csv 输出(请参见此处

  2. 将该字段的架构更改为 indexed=true

  3. 然后重新索引所有这些(csv输出也可用于更新)

于 2013-06-01T09:59:47.683 回答
0

解决了我自己,只使用一个索引阅读器和一个作家。我不知道这是否是正确的方法。该字段是一个字符串字段(已存储),因此对于这种情况,它可以正常工作。

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();
于 2013-06-01T12:44:57.900 回答