You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2008/04/03 18:42:07 UTC
svn commit: r644400 - in /lucene/java/trunk/src:
java/org/apache/lucene/index/CheckIndex.java
java/org/apache/lucene/index/DocumentsWriterFieldData.java
java/org/apache/lucene/index/IndexWriter.java
test/org/apache/lucene/index/TestIndexWriter.java
Author: mikemccand
Date: Thu Apr 3 09:42:06 2008
New Revision: 644400
URL: http://svn.apache.org/viewvc?rev=644400&view=rev
Log:
LUCENE-1255: if position is negative, silently change it to 0
Modified:
lucene/java/trunk/src/java/org/apache/lucene/index/CheckIndex.java
lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriterFieldData.java
lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java
lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/CheckIndex.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/CheckIndex.java?rev=644400&r1=644399&r2=644400&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/CheckIndex.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/CheckIndex.java Thu Apr 3 09:42:06 2008
@@ -223,7 +223,7 @@
final int pos = termPositions.nextPosition();
if (pos < 0)
throw new RuntimeException("term " + term + ": doc " + doc + ": pos " + pos + " is out of bounds");
- if (pos <= lastPos)
+ if (pos < lastPos)
throw new RuntimeException("term " + term + ": doc " + doc + ": pos " + pos + " < lastPos " + lastPos);
}
}
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriterFieldData.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriterFieldData.java?rev=644400&r1=644399&r2=644400&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriterFieldData.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/DocumentsWriterFieldData.java Thu Apr 3 09:42:06 2008
@@ -239,11 +239,13 @@
try {
offsetEnd = offset-1;
- Token token;
for(;;) {
- token = stream.next(localToken);
+ Token token = stream.next(localToken);
if (token == null) break;
position += (token.getPositionIncrement() - 1);
+ // LUCENE-1255: don't allow negative positon
+ if (position < 0)
+ position = 0;
addPosition(token);
if (++length >= maxFieldLength) {
if (threadState.docWriter.infoStream != null)
Modified: lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java?rev=644400&r1=644399&r2=644400&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/IndexWriter.java Thu Apr 3 09:42:06 2008
@@ -1692,8 +1692,11 @@
throw oom;
} finally {
synchronized(this) {
- if (!closed)
+ if (!closed) {
closing = false;
+ if (infoStream != null)
+ message("hit exception while closing");
+ }
notifyAll();
}
}
Modified: lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=644400&r1=644399&r2=644400&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/index/TestIndexWriter.java Thu Apr 3 09:42:06 2008
@@ -30,6 +30,7 @@
import org.apache.lucene.analysis.WhitespaceAnalyzer;
import org.apache.lucene.analysis.WhitespaceTokenizer;
import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.SinkTokenizer;
import org.apache.lucene.analysis.TokenFilter;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
@@ -40,6 +41,9 @@
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.spans.SpanTermQuery;
+import org.apache.lucene.search.PhraseQuery;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.store.RAMDirectory;
@@ -3548,5 +3552,47 @@
for(int i=0;i<20;i++)
assertEquals(expected[i], utf16a.result[i]);
}
+ }
+
+ // LUCENE-1255
+ public void testNegativePositions() throws Throwable {
+ SinkTokenizer tokens = new SinkTokenizer();
+ Token t = new Token();
+ t.setTermText("a");
+ t.setPositionIncrement(0);
+ tokens.add(t);
+ t.setTermText("b");
+ t.setPositionIncrement(1);
+ tokens.add(t);
+ t.setTermText("c");
+ tokens.add(t);
+
+ MockRAMDirectory dir = new MockRAMDirectory();
+ IndexWriter w = new IndexWriter(dir, false, new WhitespaceAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
+ Document doc = new Document();
+ doc.add(new Field("field", tokens));
+ w.addDocument(doc);
+ w.commit();
+
+ IndexSearcher s = new IndexSearcher(dir);
+ PhraseQuery pq = new PhraseQuery();
+ pq.add(new Term("field", "a"));
+ pq.add(new Term("field", "b"));
+ pq.add(new Term("field", "c"));
+ Hits hits = s.search(pq);
+ assertEquals(1, hits.length());
+
+ Query q = new SpanTermQuery(new Term("field", "a"));
+ hits = s.search(q);
+ assertEquals(1, hits.length());
+ TermPositions tps = s.getIndexReader().termPositions(new Term("field", "a"));
+ assertTrue(tps.next());
+ assertEquals(1, tps.freq());
+ assertEquals(0, tps.nextPosition());
+ w.close();
+
+ assertTrue(_TestUtil.checkIndex(dir));
+ s.close();
+ dir.close();
}
}