Index: lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FastVectorHighlighterTest.java =================================================================== --- lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FastVectorHighlighterTest.java (revision 1471344) +++ lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FastVectorHighlighterTest.java (working copy) @@ -16,10 +16,14 @@ * limitations under the License. */ import java.io.IOException; +import java.io.Reader; +import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.MockAnalyzer; import org.apache.lucene.analysis.MockTokenFilter; import org.apache.lucene.analysis.MockTokenizer; +import org.apache.lucene.analysis.core.WhitespaceTokenizer; +import org.apache.lucene.analysis.ngram.NGramTokenFilter; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.FieldType; @@ -30,6 +34,7 @@ import org.apache.lucene.index.Term; import org.apache.lucene.queries.CommonTermsQuery; import org.apache.lucene.search.BooleanClause.Occur; +import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.PhraseQuery; @@ -72,6 +77,44 @@ dir.close(); } + public void testFuckedupNgram() throws IOException { + Directory dir = newDirectory(); + Analyzer analyzer = new Analyzer() { + + @Override + protected TokenStreamComponents createComponents(String fieldName, + Reader reader) { + WhitespaceTokenizer wst = new WhitespaceTokenizer(TEST_VERSION_CURRENT, reader); + NGramTokenFilter ngram = new NGramTokenFilter(TEST_VERSION_CURRENT, wst, 1, 20); + return new TokenStreamComponents(wst, ngram); + } + + }; + IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, analyzer)); + Document doc = new Document(); + FieldType type = new FieldType(TextField.TYPE_STORED); + type.setStoreTermVectorOffsets(true); + type.setStoreTermVectorPositions(true); + type.setStoreTermVectors(true); + type.freeze(); + Field field = new Field("field", "logicacmg ehemals avinci - the know how company", type); + doc.add(field); + writer.addDocument(doc); + FastVectorHighlighter highlighter = new FastVectorHighlighter(); + BooleanQuery query = new BooleanQuery(); + query.add(new BooleanClause(new TermQuery(new Term("field", "m")), Occur.SHOULD)); + query.add(new BooleanClause(new TermQuery(new Term("field", "logica")), Occur.SHOULD)); + IndexReader reader = DirectoryReader.open(writer, true); + int docId = 0; + FieldQuery fieldQuery = highlighter.getFieldQuery( query, reader ); + String[] bestFragments = highlighter.getBestFragments(fieldQuery, reader, docId, "field", 54, 1); + // highlighted results are centered + assertEquals("logicacmg ehemals avinci - the know how company", bestFragments[0]); + reader.close(); + writer.close(); + dir.close(); + } + public void testPhraseHighlightLongTextTest() throws IOException { Directory dir = newDirectory(); IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())));