Hi all,
I use Lucene 4.0.
I try to find offsets for phrase queries.
My code works then I search for one word but then I call it for some phrase I
didn't get offsets.
termsEnum.seekExact returns false for phrase queries.
reader = DirectoryReader.open( mIndexDir );
IndexSearcher searcher = new IndexSearcher(reader);
QueryParser parser = new QueryParser(Version.LUCENE_40, mField,
mAnalyzer);
Query query = parser.parse(aQuery);
TopScoreDocCollector collector =
TopScoreDocCollector.create(100, true);
searcher.search(query, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
for(int i=0;i<hits.length;++i) {
int docId = hits[i].doc;
Document d = searcher.doc(docId);
Terms tfvector = reader.getTermVector(docId, "contents");
if( tfvector != null )
{
TermsEnum termsEnum = tfvector.iterator(null);
if ( termsEnum.seekExact(new BytesRef(
aQuery.toLowerCase() ), false ) )
{
DocsAndPositionsEnum dpEnum = null;
dpEnum = termsEnum.docsAndPositions(null, dpEnum);
if( dpEnum != null )
{
int freq = dpEnum.freq();
int maxOcc = 20;
while( freq-- > 0 && maxOcc-- > 0 ) {
dpEnum.nextPosition();
System.out.println("Start offset " +
dpEnum.startOffset() + " End offset " + dpEnum.endOffset());
}
}
}
What is the problem?
Thanks in advance, Vitaly.