Index: lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragListBuilder.java =================================================================== --- lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragListBuilder.java (revision 1393556) +++ lucene/highlighter/src/java/org/apache/lucene/search/vectorhighlight/BaseFragListBuilder.java (working copy) @@ -69,13 +69,14 @@ wpil.clear(); wpil.add( phraseInfo ); + int firstOffset = phraseInfo.getStartOffset(); int st = phraseInfo.getStartOffset() - margin < startOffset ? startOffset : phraseInfo.getStartOffset() - margin; int en = st + fragCharSize; if( phraseInfo.getEndOffset() > en ) en = phraseInfo.getEndOffset(); - startOffset = en; + int lastEndOffset = phraseInfo.getEndOffset(); while( true ){ if( ite.hasNext() ){ phraseInfo = ite.next(); @@ -84,11 +85,22 @@ } else break; - if( phraseInfo.getEndOffset() <= en ) + if( phraseInfo.getEndOffset() <= en ){ wpil.add( phraseInfo ); + lastEndOffset = phraseInfo.getEndOffset(); + } else break; } + int matchLen = lastEndOffset - firstOffset; + //now recalculate the start and end position to "center" the result + int newMargin = (fragCharSize-matchLen)/2; + st = firstOffset - newMargin; + if(st