Index: contrib/analyzers/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenFilter.java =================================================================== --- contrib/analyzers/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenFilter.java (revision 909969) +++ contrib/analyzers/common/src/java/org/apache/lucene/analysis/ngram/EdgeNGramTokenFilter.java (working copy) @@ -70,6 +70,7 @@ private char[] curTermBuffer; private int curTermLength; private int curGramSize; + private int tokStart; private final TermAttribute termAtt; private final OffsetAttribute offsetAtt; @@ -100,8 +101,8 @@ this.minGram = minGram; this.maxGram = maxGram; this.side = side; - this.termAtt = addAttribute(TermAttribute.class); - this.offsetAtt = addAttribute(OffsetAttribute.class); + this.termAtt = (TermAttribute)addAttribute(TermAttribute.class); + this.offsetAtt = (OffsetAttribute)addAttribute(OffsetAttribute.class); } /** @@ -123,9 +124,10 @@ if (!input.incrementToken()) { return false; } else { - curTermBuffer = (char[]) termAtt.termBuffer().clone(); + curTermBuffer = termAtt.termBuffer().clone(); curTermLength = termAtt.termLength(); curGramSize = minGram; + tokStart = offsetAtt.startOffset(); } } if (curGramSize <= maxGram) { @@ -135,7 +137,7 @@ int start = side == Side.FRONT ? 0 : curTermLength - curGramSize; int end = start + curGramSize; clearAttributes(); - offsetAtt.setOffset(start, end); + offsetAtt.setOffset(tokStart + start, tokStart + end); termAtt.setTermBuffer(curTermBuffer, start, curGramSize); curGramSize++; return true;