You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2023/03/13 12:40:10 UTC
[lucene] branch branch_9x updated: Fix boost missing in MultiFieldQueryParser (#12202)
This is an automated email from the ASF dual-hosted git repository.
rmuir pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/lucene.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new f5d1e1c787c Fix boost missing in MultiFieldQueryParser (#12202)
f5d1e1c787c is described below
commit f5d1e1c787c50eb2649a3dad1b92e4def2636708
Author: Jasir KT <me...@gmail.com>
AuthorDate: Mon Mar 13 17:57:42 2023 +0530
Fix boost missing in MultiFieldQueryParser (#12202)
When using boost along with any of fuzzy, wildcard, regexp, range or prefix queries, the boost is not applied.
---
lucene/CHANGES.txt | 2 ++
.../queryparser/classic/MultiFieldQueryParser.java | 25 +++++++++++++++++-----
.../classic/TestMultiFieldQueryParser.java | 20 +++++++++++++++++
3 files changed, 42 insertions(+), 5 deletions(-)
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index c17eec1ea0c..68281700e81 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -71,6 +71,8 @@ Bug Fixes
* GITHUB#12196: Fix MultiFieldQueryParser to handle both query boost and phrase slop at the same time. (Jasir KT)
+* GITHUB#12202: Fix MultiFieldQueryParser to apply boosts to regexp, wildcard, prefix, range, fuzzy queries. (Jasir KT)
+
Build
---------------------
diff --git a/lucene/queryparser/src/java/org/apache/lucene/queryparser/classic/MultiFieldQueryParser.java b/lucene/queryparser/src/java/org/apache/lucene/queryparser/classic/MultiFieldQueryParser.java
index e2c9802935f..66d0787552c 100644
--- a/lucene/queryparser/src/java/org/apache/lucene/queryparser/classic/MultiFieldQueryParser.java
+++ b/lucene/queryparser/src/java/org/apache/lucene/queryparser/classic/MultiFieldQueryParser.java
@@ -132,6 +132,16 @@ public class MultiFieldQueryParser extends QueryParser {
return q;
}
+ private Query applyBoost(Query q, String field) {
+ if (boosts != null) {
+ Float boost = boosts.get(field);
+ if (boost != null) {
+ q = new BoostQuery(q, boost);
+ }
+ }
+ return q;
+ }
+
@Override
protected Query getFieldQuery(String field, String queryText, boolean quoted)
throws ParseException {
@@ -205,7 +215,8 @@ public class MultiFieldQueryParser extends QueryParser {
}
return getMultiFieldQuery(clauses);
}
- return super.getFuzzyQuery(field, termStr, minSimilarity);
+ Query q = super.getFuzzyQuery(field, termStr, minSimilarity);
+ return applyBoost(q, field);
}
@Override
@@ -217,7 +228,8 @@ public class MultiFieldQueryParser extends QueryParser {
}
return getMultiFieldQuery(clauses);
}
- return super.getPrefixQuery(field, termStr);
+ Query q = super.getPrefixQuery(field, termStr);
+ return applyBoost(q, field);
}
@Override
@@ -229,7 +241,8 @@ public class MultiFieldQueryParser extends QueryParser {
}
return getMultiFieldQuery(clauses);
}
- return super.getWildcardQuery(field, termStr);
+ Query q = super.getWildcardQuery(field, termStr);
+ return applyBoost(q, field);
}
@Override
@@ -243,7 +256,8 @@ public class MultiFieldQueryParser extends QueryParser {
}
return getMultiFieldQuery(clauses);
}
- return super.getRangeQuery(field, part1, part2, startInclusive, endInclusive);
+ Query q = super.getRangeQuery(field, part1, part2, startInclusive, endInclusive);
+ return applyBoost(q, field);
}
@Override
@@ -255,7 +269,8 @@ public class MultiFieldQueryParser extends QueryParser {
}
return getMultiFieldQuery(clauses);
}
- return super.getRegexpQuery(field, termStr);
+ Query q = super.getRegexpQuery(field, termStr);
+ return applyBoost(q, field);
}
/** Creates a multifield query */
diff --git a/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestMultiFieldQueryParser.java b/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestMultiFieldQueryParser.java
index ee684c30f85..95e78f3d9dd 100644
--- a/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestMultiFieldQueryParser.java
+++ b/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestMultiFieldQueryParser.java
@@ -161,6 +161,26 @@ public class TestMultiFieldQueryParser extends LuceneTestCase {
q = mfqp.parse("\"one two\"~2");
assertEquals("(b:\"one two\"~2)^5.0 (t:\"one two\"~2)^10.0", q.toString());
+ // check boost with fuzzy
+ q = mfqp.parse("one~");
+ assertEquals("(b:one~2)^5.0 (t:one~2)^10.0", q.toString());
+
+ // check boost with prefix
+ q = mfqp.parse("one*");
+ assertEquals("(b:one*)^5.0 (t:one*)^10.0", q.toString());
+
+ // check boost with wildcard
+ q = mfqp.parse("o?n*e");
+ assertEquals("(b:o?n*e)^5.0 (t:o?n*e)^10.0", q.toString());
+
+ // check boost with regex
+ q = mfqp.parse("/[a-z][123]/");
+ assertEquals("(b:/[a-z][123]/)^5.0 (t:/[a-z][123]/)^10.0", q.toString());
+
+ // check boost with range
+ q = mfqp.parse("[one TO two]");
+ assertEquals("(b:[one TO two])^5.0 (t:[one TO two])^10.0", q.toString());
+
q = mfqp.parse("one^3 AND two^4");
assertEquals("+((b:one)^5.0 (t:one)^10.0)^3.0 +((b:two)^5.0 (t:two)^10.0)^4.0", q.toString());
}