SOLR-3278: Negative boost support to the Extended Dismax Query Parser Boost Query

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1305908 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
James Dyer 2012-03-27 17:16:10 +00:00
parent ce1cead6eb
commit aed1330b54
3 changed files with 32 additions and 6 deletions

View File

@ -250,6 +250,9 @@ New Features
the same behaviour as solr 3.5, favouring throughput over latency. More the same behaviour as solr 3.5, favouring throughput over latency. More
information can be found on the wiki (http://wiki.apache.org/solr/SolrConfigXml) (Greg Bowyer) information can be found on the wiki (http://wiki.apache.org/solr/SolrConfigXml) (Greg Bowyer)
* SOLR-3278: Negative boost support to the Extended Dismax Query Parser Boost Query (bq).
(James Dyer)
Optimizations Optimizations
---------------------- ----------------------

View File

@ -344,13 +344,17 @@ class ExtendedDismaxQParser extends QParser {
/* * * Boosting Query * * */ /* * * Boosting Query * * */
boostParams = solrParams.getParams(DisMaxParams.BQ); boostParams = solrParams.getParams(DisMaxParams.BQ);
//List<Query> boostQueries = U.parseQueryStrings(req, boostParams);
boostQueries=null; boostQueries=null;
if (boostParams!=null && boostParams.length>0) { if (boostParams!=null && boostParams.length>0) {
Map<String,Float> bqBoosts = SolrPluginUtils.parseFieldBoosts(boostParams);
boostQueries = new ArrayList<Query>(); boostQueries = new ArrayList<Query>();
for (String qs : boostParams) { for (Map.Entry<String,Float> bqs : bqBoosts.entrySet()) {
if (qs.trim().length()==0) continue; if (bqs.getKey().trim().length()==0) continue;
Query q = subQuery(qs, null).getQuery(); Query q = subQuery(bqs.getKey(), null).getQuery();
Float b = bqs.getValue();
if(b!=null) {
q.setBoost(b);
}
boostQueries.add(q); boostQueries.add(q);
} }
} }

View File

@ -53,8 +53,11 @@ public class TestExtendedDismaxParser extends AbstractSolrTestCase {
"text", "line up and fly directly at the enemy death cannons, clogging them with wreckage!")); "text", "line up and fly directly at the enemy death cannons, clogging them with wreckage!"));
assertU(adoc("id", "48", "text_sw", "this has gigabyte potential", "foo_i","100")); assertU(adoc("id", "48", "text_sw", "this has gigabyte potential", "foo_i","100"));
assertU(adoc("id", "49", "text_sw", "start the big apple end", "foo_i","-100")); assertU(adoc("id", "49", "text_sw", "start the big apple end", "foo_i","-100"));
assertU(adoc("id", "50", "text_sw", "start new big city end")); assertU(adoc("id", "50", "text_sw", "start new big city end"));
assertU(adoc("id", "51", "store", "12.34,-56.78")); assertU(adoc("id", "51", "store", "12.34,-56.78"));
assertU(adoc("id", "52", "text_sw", "tekna theou klethomen"));
assertU(adoc("id", "53", "text_sw", "nun tekna theou esmen"));
assertU(adoc("id", "54", "text_sw", "phanera estin ta tekna tou theou"));
assertU(commit()); assertU(commit());
} }
@Override @Override
@ -63,7 +66,7 @@ public class TestExtendedDismaxParser extends AbstractSolrTestCase {
// the super classes version // the super classes version
super.tearDown(); super.tearDown();
} }
// test the edismax query parser based on the dismax parser // test the edismax query parser based on the dismax parser
public void testFocusQueryParser() { public void testFocusQueryParser() {
String allq = "id:[42 TO 51]"; String allq = "id:[42 TO 51]";
@ -294,6 +297,22 @@ public class TestExtendedDismaxParser extends AbstractSolrTestCase {
***/ ***/
} }
public void testBoostQuery() {
assertQ(
req("q", "tekna", "qf", "text_sw", "defType", "edismax", "bq", "id:54^100", "bq", "id:53^10", "fq", "id:[52 TO 54]", "fl", "id,score"),
"//doc[1]/str[@name='id'][.='54']",
"//doc[2]/str[@name='id'][.='53']",
"//doc[3]/str[@name='id'][.='52']"
);
assertQ(
req("q", "tekna", "qf", "text_sw", "defType", "edismax", "bq", "id:54^-100", "bq", "id:53^10", "bq", "id:52", "fq", "id:[52 TO 54]", "fl", "id,score"),
"//doc[1]/str[@name='id'][.='53']",
"//doc[2]/str[@name='id'][.='52']",
"//doc[3]/str[@name='id'][.='54']"
);
}
public void testUserFields() { public void testUserFields() {
String oner = "*[count(//doc)=1]"; String oner = "*[count(//doc)=1]";