diff --git a/lucene/highlighter/src/test/org/apache/lucene/search/highlight/TokenSourcesTest.java b/lucene/highlighter/src/test/org/apache/lucene/search/highlight/TokenSourcesTest.java index 8e8bea2..83c599d 100644 --- a/lucene/highlighter/src/test/org/apache/lucene/search/highlight/TokenSourcesTest.java +++ b/lucene/highlighter/src/test/org/apache/lucene/search/highlight/TokenSourcesTest.java @@ -17,8 +17,6 @@ package org.apache.lucene.search.highlight; * limitations under the License. */ -import java.io.IOException; - import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; @@ -42,6 +40,8 @@ import org.apache.lucene.search.spans.SpanTermQuery; import org.apache.lucene.store.Directory; import org.apache.lucene.util.LuceneTestCase; +import java.io.IOException; + // LUCENE-2874 public class TokenSourcesTest extends LuceneTestCase { private static final String FIELD = "text"; @@ -260,4 +260,50 @@ public class TokenSourcesTest extends LuceneTestCase { } } + public void testOverlapWithPositionsNoOffsetsExactPhrase() + throws IOException, InvalidTokenOffsetsException { + final String TEXT = "the fox did not jump"; + final Directory directory = newDirectory(); + final IndexWriter indexWriter = new IndexWriter(directory, + newIndexWriterConfig(TEST_VERSION_CURRENT, null)); + try { + final Document document = new Document(); + FieldType customType = new FieldType(TextField.TYPE_NOT_STORED); + customType.setStoreTermVectors(true); + customType.setStoreTermVectorOffsets(false); + customType.setStoreTermVectorPositions(true); + document.add(new Field(FIELD, new OverlappingTokenStream(), customType)); + indexWriter.addDocument(document); + } finally { + indexWriter.close(); + } + final IndexReader indexReader = DirectoryReader.open(directory); + try { + assertEquals(1, indexReader.numDocs()); + final IndexSearcher indexSearcher = newSearcher(indexReader); + // final DisjunctionMaxQuery query = new DisjunctionMaxQuery(1); + // query.add(new SpanTermQuery(new Term(FIELD, "the"))); + // query.add(new SpanTermQuery(new Term(FIELD, "fox"))); + final Query phraseQuery = new SpanNearQuery(new SpanQuery[] { + new SpanTermQuery(new Term(FIELD, "the")), + new SpanTermQuery(new Term(FIELD, "fox"))}, 0, true); + + TopDocs hits = indexSearcher.search(phraseQuery, 1); + assertEquals(1, hits.totalHits); + final Highlighter highlighter = new Highlighter( + new SimpleHTMLFormatter(), new SimpleHTMLEncoder(), + new QueryScorer(phraseQuery)); + final TokenStream tokenStream = TokenSources + .getTokenStream( + indexReader.getTermVector(0, FIELD), + false); + assertEquals("the fox did not jump", + highlighter.getBestFragment(tokenStream, TEXT)); + } finally { + indexReader.close(); + directory.close(); + } + } + + }