Index: lucene/highlighter/build.xml
===================================================================
--- lucene/highlighter/build.xml (revision 1475717)
+++ lucene/highlighter/build.xml (working copy)
@@ -33,8 +33,15 @@
+
+
+
+
+
+
+
+
-
Index: lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FastVectorHighlighterTest.java
===================================================================
--- lucene/highlighter/src/test/org/apache/lucene/search/vectorhighlight/FastVectorHighlighterTest.java (revision 1475717)
+++ 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 testNgramPositions() 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())));