Index: contrib/highlighter/src/test/org/apache/lucene/search/vectorhighlight/AbstractTestCase.java =================================================================== --- contrib/highlighter/src/test/org/apache/lucene/search/vectorhighlight/AbstractTestCase.java (revision 988162) +++ contrib/highlighter/src/test/org/apache/lucene/search/vectorhighlight/AbstractTestCase.java (working copy) @@ -61,6 +61,8 @@ protected QueryParser paB; protected static final String[] shortMVValues = { + "", + "", "a b c", "", // empty data in multi valued field "d e" @@ -353,6 +355,9 @@ } protected void makeIndexShortMV() throws Exception { + + // "" + // "" // 012345 // "a b c" Index: contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragmentsBuilder.java =================================================================== --- contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragmentsBuilder.java (revision 988162) +++ contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragmentsBuilder.java (working copy) @@ -155,9 +155,10 @@ protected String getFragmentSource( StringBuilder buffer, int[] index, String[] values, int startOffset, int endOffset ){ while( buffer.length() < endOffset && index[0] < values.length ){ - if( index[0] > 0 && values[index[0]].length() > 0 ) + buffer.append( values[index[0]] ); + if( values[index[0]].length() > 0 && index[0] + 1 < values.length ) buffer.append( multiValuedSeparator ); - buffer.append( values[index[0]++] ); + index[0]++; } int eo = buffer.length() < endOffset ? buffer.length() : endOffset; return buffer.substring( startOffset, eo ); @@ -166,9 +167,10 @@ protected String getFragmentSource( StringBuilder buffer, int[] index, Field[] values, int startOffset, int endOffset ){ while( buffer.length() < endOffset && index[0] < values.length ){ - if( index[0] > 0 && values[index[0]].isTokenized() && values[index[0]].stringValue().length() > 0 ) + buffer.append( values[index[0]].stringValue() ); + if( values[index[0]].isTokenized() && values[index[0]].stringValue().length() > 0 && index[0] + 1 < values.length ) buffer.append( multiValuedSeparator ); - buffer.append( values[index[0]++].stringValue() ); + index[0]++; } int eo = buffer.length() < endOffset ? buffer.length() : endOffset; return buffer.substring( startOffset, eo );