lucene-java-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ehatc...@apache.org
Subject svn commit: r384072 - in /lucene/java/trunk: CHANGES.txt src/java/org/apache/lucene/search/FilteredQuery.java src/test/org/apache/lucene/search/TestFilteredQuery.java
Date Wed, 08 Mar 2006 00:59:30 GMT
Author: ehatcher
Date: Tue Mar  7 16:59:28 2006
New Revision: 384072

URL: http://svn.apache.org/viewcvs?rev=384072&view=rev
Log:
Part of LUCENE-330: fixing FilteredQuery when nested within BooleanQuery

Modified:
    lucene/java/trunk/CHANGES.txt
    lucene/java/trunk/src/java/org/apache/lucene/search/FilteredQuery.java
    lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java

Modified: lucene/java/trunk/CHANGES.txt
URL: http://svn.apache.org/viewcvs/lucene/java/trunk/CHANGES.txt?rev=384072&r1=384071&r2=384072&view=diff
==============================================================================
--- lucene/java/trunk/CHANGES.txt (original)
+++ lucene/java/trunk/CHANGES.txt Tue Mar  7 16:59:28 2006
@@ -2,6 +2,13 @@
 
 $Id$
 
+2.0 RC1
+
+Bug fixes
+
+ 1. LUCENE-330: Fix issue of FilteredQuery not working properly within
+    BooleanQuery.  (Paul Elschot via Erik Hatcher)
+
 1.9.1
 
 Bug fixes

Modified: lucene/java/trunk/src/java/org/apache/lucene/search/FilteredQuery.java
URL: http://svn.apache.org/viewcvs/lucene/java/trunk/src/java/org/apache/lucene/search/FilteredQuery.java?rev=384072&r1=384071&r2=384072&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/search/FilteredQuery.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/search/FilteredQuery.java Tue Mar  7 16:59:28
2006
@@ -1,7 +1,7 @@
 package org.apache.lucene.search;
 
 /**
- * Copyright 2004 The Apache Software Foundation
+ * Copyright 2004,2006 The Apache Software Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -75,22 +75,42 @@
       // return this query
       public Query getQuery() { return FilteredQuery.this; }
 
-      // return a scorer that overrides the enclosed query's score if
-      // the given hit has been filtered out.
-      public Scorer scorer (IndexReader indexReader) throws IOException {
+      // return a filtering scorer
+       public Scorer scorer (IndexReader indexReader) throws IOException {
         final Scorer scorer = weight.scorer (indexReader);
         final BitSet bitset = filter.bits (indexReader);
         return new Scorer (similarity) {
 
-          // pass these methods through to the enclosed scorer
-          public boolean next() throws IOException { return scorer.next(); }
+          public boolean next() throws IOException {
+            do {
+              if (! scorer.next()) {
+                return false;
+              }
+            } while (! bitset.get(scorer.doc()));
+            /* When skipTo() is allowed on scorer it should be used here
+             * in combination with bitset.nextSetBit(...)
+             * See the while loop in skipTo() below.
+             */
+            return true;
+          }
           public int doc() { return scorer.doc(); }
-          public boolean skipTo (int i) throws IOException { return scorer.skipTo(i); }
 
-          // if the document has been filtered out, set score to 0.0
-          public float score() throws IOException {
-            return (bitset.get(scorer.doc())) ? scorer.score() : 0.0f;
-          }
+          public boolean skipTo(int i) throws IOException {
+            if (! scorer.skipTo(i)) {
+              return false;
+            }
+            while (! bitset.get(scorer.doc())) {
+              int nextFiltered = bitset.nextSetBit(scorer.doc() + 1);
+              if (nextFiltered == -1) {
+                return false;
+              } else if (! scorer.skipTo(nextFiltered)) {
+                return false;
+              }
+            }
+            return true;
+           }
+
+          public float score() throws IOException { return scorer.score(); }
 
           // add an explanation about whether the document was filtered
           public Explanation explain (int i) throws IOException {

Modified: lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java
URL: http://svn.apache.org/viewcvs/lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java?rev=384072&r1=384071&r2=384072&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/search/TestFilteredQuery.java Tue Mar  7
16:59:28 2006
@@ -126,7 +126,6 @@
     assertEquals(2, hits.length());
   }
 
-
   public void testBoolean() throws Exception {
     BooleanQuery bq = new BooleanQuery();
     Query query = new FilteredQuery(new MatchAllDocsQuery(),
@@ -136,8 +135,6 @@
         new SingleDocTestFilter(1));
     bq.add(query, BooleanClause.Occur.MUST);
     Hits hits = searcher.search(bq);
-    System.out.println(hits.id(0));
-    System.out.println(hits.id(1));
     assertEquals(0, hits.length());
   }
 }



Mime
View raw message