[英]How to get n first terms from field in Lucene 5.x?
我正在將Lucene用於Eclipse插件。 目前,我對索引的術語進行如下迭代:
while ((text = vectorEnum.next()) != null)
現在,我還需要獲取字段的前n個元素。 我認為必須使用PostingsEnum來完成此操作,但我不知道如何使用它。 我想我可以通過在我的TermsEnum上調用postsing ()來獲得它,但是我不知道該怎么做。
編輯:那是我的代碼的重要部分,我猜:
Terms vector = indexReader.getTermVector(id, field);
BytesRef text = null;
if (vector != null) {
TermsEnum vectorEnum = vector.iterator();
while ((text = vectorEnum.next()) != null) {
String term = text.utf8ToString();
[do stuff]
}
這就是FieldType:
FieldType fieldType = new FieldType();
fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS);
fieldType.setStored(true);
fieldType.setStoreTermVectors(true);
fieldType.setTokenized(true);
不知道為什么,但是使用setIndexOptions請求職位似乎不起作用,因此您必須顯式設置setStoreTermVectorPositions。 您仍然必須將索引選項設置為NONE以外的其他值,但是似乎沒有必要使用DOCS_AND_FREQS_AND_POSITIONS,即
fieldType.setIndexOptions(IndexOptions.DOCS);
fieldType.setStoreTermVectorPositions(true);
然后您可以訪問以下職位:
Terms vector = indexReader.getTermVector(id, field);
if (vector != null) {
TermsEnum vectorEnum = vector.iterator();
BytesRef text;
while ((text = vectorEnum.next()) != null) {
String term = text.utf8ToString();
PostingsEnum postings = vectorEnum.postings(null, PostingsEnum.POSITIONS);
while (postings.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
int freq = postings.freq();
while (freq-- > 0)
logger.info("Position: {}", postings.nextPosition());
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.