我在我的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。
答案 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)));