Solr 4.1 にアップグレードしていますが、新しい API を使用して位置とオフセットの情報を取得できません。私のインデックスは、文字列「 one quick brown fox jumped over one lazy dog 」を含む 1 つのフィールドを持つ 1 つのドキュメントで構成されています。「1」のインデックスを照会し、「1」に対応する位置とオフセットを取得しようとしています。
ここにコードスニペットがあります
Terms terms=reader.getTermVector(docId, fieldName);
TermsEnum termsEnum= terms.iterator(TermsEnum.EMPTY);
BytesRef term;
while((term=termsEnum.next())!=null){
String docTerm = term.utf8ToString();
DocsAndPositionsEnum docPosEnum = termsEnum.docsAndPositions(null, null, DocsAndPositionsEnum.FLAG_OFFSETS);
//Check if the current term is the same as the query term and if so
//retrieve all positions (can be multiple occurrences of a term in a field) corresponding to the term
if (queryTerms.contains(docTerm)) {
int position;
while((position=docPosEnum.nextPosition())!=-1){
int start=docPosEnum.startOffset();
int end=docPosEnum.endOffset();
//Store start, end and position in an a list
}
}
}
内側の while ループが正しくありません。DocsAndPositionsEnum 内のすべての位置を反復処理する方法についての指針は、非常に高く評価されます。