从DirectoryReader访问自定义Lucene属性

时间:2015-12-11 15:01:41

标签: java lucene

我在我的Lucene管道中添加了一个自定义属性,如所描述的here(在“添加自定义属性”部分中)。

现在,在我构建索引之后(通过IndexWriter添加所有文档),我希望能够在读取索引目录时评估此属性。我该怎么做呢?

我现在正在做的是:

DirectoryReader reader = DirectoryReader.open(index);
TermsEnum iterator = null;
for (int i = 0; i < r.maxDoc(); i++) {
    Terms terms = r.getTermVector(i, "content");
    iterator = terms.iterator(iterator);
    AttributeSource attributes = iterator.attributes();
    SentenceAttribute sentence = attributes.addAttribute(SentenceAttribute.class);

    while (true) {
        BytesRef term = iterator.next();
        if (term == null) {
            break;
        }

        System.out.println(term.utf8ToString());
        System.out.println(sentence.getStringSentenceId());
    }
}

它似乎不起作用:我始终得到相同的sentenceId

我使用Lucene 4.9.1。

1 个答案:

答案 0 :(得分:0)

最后,我解决了它。为此,我使用PayloadAttribute来存储我需要的数据。

要在索引中存储有效负载,首先要设置storeTermVectorPayloads的{​​{1}}属性以及其他一些内容:

Field

然后,对于分析阶段的每个令牌,设置有效负载属性:

fieldType.setStoreTermVectors(true);
fieldType.setStoreTermVectorOffsets(true);
fieldType.setStoreTermVectorPositions(true);
fieldType.setStoreTermVectorPayloads(true);

然后建立一个索引,最后,之后可以通过这种方式获得有效载荷:

private final PayloadAttribute payloadAtt = addAttribute(PayloadAttribute.class);

// in incrementToken()
payloadAtt.setPayload(new BytesRef(String.valueOf(myAttr)));