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]>