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 dn...@apache.org on 2005/07/17 12:47:15 UTC

svn commit: r219387 - in /lucene/java/trunk/src: java/org/apache/lucene/index/MultipleTermPositions.java test/org/apache/lucene/search/TestMultiPhraseQuery.java

Author: dnaber
Date: Sun Jul 17 03:47:14 2005
New Revision: 219387

URL: http://svn.apache.org/viewcvs?rev=219387&view=rev
Log:
Fix for NPE (bug #35626). Fix by Hans Hjelm, test case by Scotty Allen.

Modified:
    lucene/java/trunk/src/java/org/apache/lucene/index/MultipleTermPositions.java
    lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java

Modified: lucene/java/trunk/src/java/org/apache/lucene/index/MultipleTermPositions.java
URL: http://svn.apache.org/viewcvs/lucene/java/trunk/src/java/org/apache/lucene/index/MultipleTermPositions.java?rev=219387&r1=219386&r2=219387&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/index/MultipleTermPositions.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/index/MultipleTermPositions.java Sun Jul 17 03:47:14 2005
@@ -175,7 +175,7 @@
     public final boolean skipTo(int target)
 	throws IOException
     {
-	while (target > _termPositionsQueue.peek().doc())
+	while (_termPositionsQueue.peek() != null && target > _termPositionsQueue.peek().doc())
 	{
 	    TermPositions tp = (TermPositions)_termPositionsQueue.pop();
 

Modified: lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java
URL: http://svn.apache.org/viewcvs/lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java?rev=219387&r1=219386&r2=219387&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/search/TestMultiPhraseQuery.java Sun Jul 17 03:47:14 2005
@@ -23,6 +23,7 @@
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.store.RAMDirectory;
 import org.apache.lucene.analysis.SimpleAnalyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 
@@ -163,6 +164,37 @@
 
       assertEquals("Wrong number of hits", 2, hits.length());
       searcher.close();
+  }
+    
+  public void testPhrasePrefixWithBooleanQuery() throws IOException {
+    RAMDirectory indexStore = new RAMDirectory();
+    IndexWriter writer = new IndexWriter(indexStore, new StandardAnalyzer(new String[]{}), true);
+    add("This is a test", "object", writer);
+    add("a note", "note", writer);
+    writer.close();
+    
+    IndexSearcher searcher = new IndexSearcher(indexStore);
+
+    // This query will be equivalent to +type:note +body:"a t*"
+    BooleanQuery q = new BooleanQuery();
+    q.add(new TermQuery(new Term("type", "note")), BooleanClause.Occur.MUST);
+
+    MultiPhraseQuery trouble = new MultiPhraseQuery();
+    trouble.add(new Term("body", "a"));
+    trouble.add(new Term[] { new Term("body", "test"), new Term("body", "this") });
+    q.add(trouble, BooleanClause.Occur.MUST);
+
+    // exception will be thrown here without fix for #35626:
+    Hits hits = searcher.search(q);
+    assertEquals("Wrong number of hits", 0, hits.length());
+    searcher.close();
+  }
+  
+  private void add(String s, String type, IndexWriter writer) throws IOException {
+    Document doc = new Document();
+    doc.add(new Field("body", s, Field.Store.YES, Field.Index.TOKENIZED));
+    doc.add(new Field("type", type, Field.Store.YES, Field.Index.UN_TOKENIZED));
+    writer.addDocument(doc);
   }
 
 }