You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ds...@apache.org on 2012/06/17 05:45:02 UTC
svn commit: r1351046 - in /lucene/dev/branches/branch_4x: ./ solr/
solr/core/ solr/core/src/java/org/apache/solr/schema/
solr/core/src/java/org/apache/solr/search/
solr/core/src/test/org/apache/solr/search/
Author: dsmiley
Date: Sun Jun 17 03:45:01 2012
New Revision: 1351046
URL: http://svn.apache.org/viewvc?rev=1351046&view=rev
Log:
SOLR-3534 dismax should consult 'df' as a default for 'qf' and throw an exception when none set
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/QueryParsing.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SurroundQParserPlugin.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1351046&r1=1351045&r2=1351046&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Sun Jun 17 03:45:01 2012
@@ -651,6 +651,10 @@ Other Changes
field can no longer be populated via <copyField/> or <field default=...>
in the schema.xml.
+* SOLR-3534: The Dismax and eDismax query parsers will fall back on the 'df' parameter
+ when 'qf' is absent. And if neither is present nor the schema default search field
+ then an exception will be thrown now. (dsmiley)
+
Documentation
----------------------
@@ -697,6 +701,9 @@ Upgrading from Solr 3.5
are strongly advised that they should re-index as document signatures may
have now changed. (see SOLR-3200 & SOLR-3226 for details)
+* SOLR-2724: Specifying <defaultSearchField> and <solrQueryParser defaultOperator="..."/> in
+ schema.xml is now considered deprecated. Instead you are encouraged to specify these via the "df"
+ and "q.op" parameters in your request handler definition. (David Smiley)
New Features
----------------------
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java?rev=1351046&r1=1351045&r2=1351046&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java Sun Jun 17 03:45:01 2012
@@ -211,7 +211,9 @@ public final class IndexSchema {
/**
- * Name of the default search field specified in the schema file
+ * Name of the default search field specified in the schema file.
+ * <br/><b>Note:</b>Avoid calling this, try to use this method so that the 'df' param is consulted as an override:
+ * {@link org.apache.solr.search.QueryParsing#getDefaultField(IndexSchema, String)}
*/
public String getDefaultSearchFieldName() {
return defaultSearchFieldName;
@@ -438,7 +440,7 @@ public final class IndexSchema {
node = (Node) xpath.evaluate("/schema/defaultSearchField/text()", document, XPathConstants.NODE);
if (node==null) {
- log.warn("no default search field specified in schema.");
+ log.debug("no default search field specified in schema.");
} else {
defaultSearchFieldName=node.getNodeValue().trim();
// throw exception if specified, but not found or not indexed
@@ -449,7 +451,7 @@ public final class IndexSchema {
throw new SolrException( SolrException.ErrorCode.SERVER_ERROR, msg );
}
}
- log.info("default search field is "+defaultSearchFieldName);
+ log.info("default search field in schema is "+defaultSearchFieldName);
}
node = (Node) xpath.evaluate("/schema/solrQueryParser/@defaultOperator", document, XPathConstants.NODE);
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java?rev=1351046&r1=1351045&r2=1351046&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/DisMaxQParser.java Sun Jun 17 03:45:01 2012
@@ -21,6 +21,7 @@ import org.apache.lucene.queryparser.cla
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Query;
+import org.apache.solr.common.params.CommonParams;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.common.params.DisMaxParams;
import org.apache.solr.common.params.SolrParams;
@@ -63,6 +64,23 @@ public class DisMaxQParser extends QPars
op.equals(QueryParser.Operator.AND) ? "100%" : "0%");
}
+ /**
+ * Uses {@link SolrPluginUtils#parseFieldBoosts(String)} with the 'qf' parameter. Falls back to the 'df' parameter
+ * or {@link org.apache.solr.schema.IndexSchema#getDefaultSearchFieldName()}.
+ */
+ public static Map<String, Float> parseQueryFields(final IndexSchema indexSchema, final SolrParams solrParams)
+ throws ParseException {
+ Map<String, Float> queryFields = SolrPluginUtils.parseFieldBoosts(solrParams.getParams(DisMaxParams.QF));
+ if (queryFields.isEmpty()) {
+ String df = QueryParsing.getDefaultField(indexSchema, solrParams.get(CommonParams.DF));
+ if (df == null) {
+ throw new ParseException("Neither "+DisMaxParams.QF+", "+CommonParams.DF +", nor the default search field are present.");
+ }
+ queryFields.put(df, 1.0f);
+ }
+ return queryFields;
+ }
+
public DisMaxQParser(String qstr, SolrParams localParams, SolrParams params, SolrQueryRequest req) {
super(qstr, localParams, params, req);
}
@@ -81,10 +99,7 @@ public class DisMaxQParser extends QPars
public Query parse() throws ParseException {
SolrParams solrParams = SolrParams.wrapDefaults(localParams, params);
- queryFields = SolrPluginUtils.parseFieldBoosts(solrParams.getParams(DisMaxParams.QF));
- if (0 == queryFields.size()) {
- queryFields.put(req.getSchema().getDefaultSearchFieldName(), 1.0f);
- }
+ queryFields = parseQueryFields(req.getSchema(), solrParams);
/* the main query we will execute. we disable the coord because
* this query is an artificial construct
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java?rev=1351046&r1=1351045&r2=1351046&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParserPlugin.java Sun Jun 17 03:45:01 2012
@@ -133,10 +133,7 @@ class ExtendedDismaxQParser extends QPar
userFields = new UserFields(U.parseFieldBoosts(solrParams.getParams(DMP.UF)));
- queryFields = SolrPluginUtils.parseFieldBoosts(solrParams.getParams(DisMaxParams.QF));
- if (0 == queryFields.size()) {
- queryFields.put(req.getSchema().getDefaultSearchFieldName(), 1.0f);
- }
+ queryFields = DisMaxQParser.parseQueryFields(req.getSchema(), solrParams);
// Boosted phrase of the full query string
List<FieldParams> phraseFields =
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/QueryParsing.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/QueryParsing.java?rev=1351046&r1=1351045&r2=1351046&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/QueryParsing.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/QueryParsing.java Sun Jun 17 03:45:01 2012
@@ -39,8 +39,6 @@ import org.apache.lucene.util.CharsRef;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.core.SolrCore;
-import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
@@ -72,7 +70,7 @@ public class QueryParsing {
/**
- * Returns the "prefered" default operator for use by Query Parsers,
+ * Returns the "preferred" default operator for use by Query Parsers,
* based on the settings in the IndexSchema which may be overridden using
* an optional String override value.
*
@@ -86,6 +84,15 @@ public class QueryParsing {
return "AND".equals(val) ? QueryParser.Operator.AND : QueryParser.Operator.OR;
}
+ /**
+ * Returns the effective default field based on the 'df' param or
+ * hardcoded schema default. May be null if either exists specified.
+ * @see org.apache.solr.common.params.CommonParams#DF
+ * @see org.apache.solr.schema.IndexSchema#getDefaultSearchFieldName
+ */
+ public static String getDefaultField(final IndexSchema s, final String df) {
+ return df != null ? df : s.getDefaultSearchFieldName();
+ }
// note to self: something needs to detect infinite recursion when parsing queries
public static int parseLocalParams(String txt, int start, Map<String, String> target, SolrParams params) throws ParseException {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SurroundQParserPlugin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SurroundQParserPlugin.java?rev=1351046&r1=1351045&r2=1351046&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SurroundQParserPlugin.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/search/SurroundQParserPlugin.java Sun Jun 17 03:45:01 2012
@@ -103,12 +103,8 @@ class SurroundQParser extends QParser {
// so what do we do with the SrndQuery ??
// processing based on example in LIA Ch 9
- String defaultField = getParam(CommonParams.DF);
- if (defaultField == null) {
- defaultField = getReq().getSchema().getDefaultSearchFieldName();
- }
-
BasicQueryFactory bqFactory = new BasicQueryFactory(this.maxBasicQueries);
+ String defaultField = QueryParsing.getDefaultField(getReq().getSchema(),getParam(CommonParams.DF));
Query lquery = sq.makeLuceneQueryField(defaultField, bqFactory);
return lquery;
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java?rev=1351046&r1=1351045&r2=1351046&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java Sun Jun 17 03:45:01 2012
@@ -123,6 +123,11 @@ public class TestExtendedDismaxParser ex
"q","100"), oner
);
+ assertQ("qf defaults to df",
+ req("defType", "edismax", "df", "trait_ss",
+ "q","Tool"), twor
+ );
+
assertQ("qf defaults to defaultSearchField"
, req( "defType", "edismax"
,"q","op")