Index: src/test/org/apache/lucene/index/TestIndexWriter.java =================================================================== --- src/test/org/apache/lucene/index/TestIndexWriter.java (revision 712226) +++ src/test/org/apache/lucene/index/TestIndexWriter.java (working copy) @@ -4206,4 +4206,26 @@ // throws IllegalStateEx w/o bug fix writer.close(); } + + // LUCENE-1442 + public void testDoubleOffsetCounting() throws Exception { + MockRAMDirectory dir = new MockRAMDirectory(); + IndexWriter w = new IndexWriter(dir, new WhitespaceAnalyzer(), IndexWriter.MaxFieldLength.LIMITED); + Document doc = new Document(); + Field f = new Field("field", "abcd", Field.Store.NO, Field.Index.NOT_ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); + doc.add(f); + doc.add(f); + w.addDocument(doc); + w.close(); + + IndexReader r = IndexReader.open(dir); + TermVectorOffsetInfo[] termOffsets = ((TermPositionVector) r.getTermFreqVector(0, "field")).getOffsets(0); + assertEquals(2, termOffsets.length); + assertEquals(0, termOffsets[0].getStartOffset()); + assertEquals(4, termOffsets[0].getEndOffset()); + assertEquals(4, termOffsets[1].getStartOffset()); + assertEquals(8, termOffsets[1].getEndOffset()); + r.close(); + dir.close(); + } } Index: src/java/org/apache/lucene/index/DocInverterPerField.java =================================================================== --- src/java/org/apache/lucene/index/DocInverterPerField.java (revision 712226) +++ src/java/org/apache/lucene/index/DocInverterPerField.java (working copy) @@ -79,7 +79,7 @@ if (!field.isTokenized()) { // un-tokenized field String stringValue = field.stringValue(); final int valueLength = stringValue.length(); - Token token = perThread.localToken.reinit(stringValue, fieldState.offset, fieldState.offset + valueLength); + Token token = perThread.localToken.reinit(stringValue, 0, valueLength); boolean success = false; try { consumer.add(token);