Hi,

Attached is an updated patch that fixes a bug with boosting boolean
queries, and adds test cases to demonstrate the fix.

I'm no a committer, so what is the procedure for me to convince someone
to apply this?

Regards,

Lee Mallabone.

Index: src/java/org/apache/lucene/queryParser/QueryParser.jj
===================================================================
RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/queryParser/QueryParser.jj,v
retrieving revision 1.21
diff -u -r1.21 QueryParser.jj
--- src/java/org/apache/lucene/queryParser/QueryParser.jj	18 Jul 2002 14:18:42 -0000	1.21
+++ src/java/org/apache/lucene/queryParser/QueryParser.jj	9 Sep 2002 08:19:20 -0000
@@ -424,7 +424,7 @@
 
 Query Clause(String field) : {
   Query q;
-  Token fieldToken=null;
+  Token fieldToken=null,boost=null;
 }
 {
   [
@@ -434,9 +434,16 @@
 
   (
    q=Term(field)
-   | <LPAREN> q=Query(field) <RPAREN>
+   | <LPAREN> q=Query(field) <RPAREN> (<CARAT> boost=<NUMBER>)?
   )
     {
+      if (boost != null) {
+      	float f = (float)1.0;
+	try {
+	  f = Float.valueOf(boost.image).floatValue();
+          q.setBoost(f);
+	} catch (Exception ignored) { }
+      }
       return q;
     }
 }
Index: src/java/org/apache/lucene/search/BooleanQuery.java
===================================================================
RCS file: /home/cvspublic/jakarta-lucene/src/java/org/apache/lucene/search/BooleanQuery.java,v
retrieving revision 1.4
diff -u -r1.4 BooleanQuery.java
--- src/java/org/apache/lucene/search/BooleanQuery.java	17 Jul 2002 17:38:04 -0000	1.4
+++ src/java/org/apache/lucene/search/BooleanQuery.java	9 Sep 2002 08:19:20 -0000
@@ -108,6 +108,14 @@
     return sum;
   }
 
+  public void setBoost(float newBoost) {
+    super.setBoost(newBoost);
+    for (int i = 0; i < clauses.size(); i++) {
+      BooleanClause clause = (BooleanClause) clauses.elementAt(i);
+      clause.query.setBoost(newBoost);
+    }
+  }
+
   void normalize(float norm) {
     for (int i = 0 ; i < clauses.size(); i++) {
       BooleanClause c = (BooleanClause)clauses.elementAt(i);
@@ -142,6 +150,10 @@
   /** Prints a user-readable version of this query. */
   public String toString(String field) {
     StringBuffer buffer = new StringBuffer();
+    if (boost > 1.0) {
+      buffer.append("(");
+    }
+     
     for (int i = 0 ; i < clauses.size(); i++) {
       BooleanClause c = (BooleanClause)clauses.elementAt(i);
       if (c.prohibited)
@@ -161,6 +173,12 @@
       if (i != clauses.size()-1)
 	buffer.append(" ");
     }
+    
+    if (boost > 1.0) {
+      buffer.append(")^");
+      buffer.append(boost);
+    }
+     
     return buffer.toString();
   }
 
Index: src/test/org/apache/lucene/queryParser/TestQueryParser.java
===================================================================
RCS file: /home/cvspublic/jakarta-lucene/src/test/org/apache/lucene/queryParser/TestQueryParser.java,v
retrieving revision 1.15
diff -u -r1.15 TestQueryParser.java
--- src/test/org/apache/lucene/queryParser/TestQueryParser.java	18 Jul 2002 14:17:41 -0000	1.15
+++ src/test/org/apache/lucene/queryParser/TestQueryParser.java	9 Sep 2002 08:19:21 -0000
@@ -190,6 +190,8 @@
 	assertTrue(getQuery("\"hello there\"", null) instanceof PhraseQuery);
 
 	assertQueryEquals("germ term^2.0", null, "germ term^2.0");
+	assertQueryEquals("(term)^2.0", null, "term^2.0");
+	assertQueryEquals("(germ term)^2.0", null, "(germ term)^2.0");
 	assertQueryEquals("term^2.0", null, "term^2.0");
 	assertQueryEquals("term^2", null, "term^2.0");
 	assertQueryEquals("\"germ term\"^2.0", null, "\"germ term\"^2.0");

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to