You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by eh...@apache.org on 2006/09/13 20:17:22 UTC
svn commit: r443053 - in /incubator/solr/trunk: CHANGES.txt
src/java/org/apache/solr/request/StandardRequestHandler.java
src/java/org/apache/solr/search/QueryParsing.java
src/java/org/apache/solr/search/SolrQueryParser.java
Author: ehatcher
Date: Wed Sep 13 11:17:21 2006
New Revision: 443053
URL: http://svn.apache.org/viewvc?view=rev&rev=443053
Log:
Add request q.op=AND|OR to specify default operator for query parsing
Modified:
incubator/solr/trunk/CHANGES.txt
incubator/solr/trunk/src/java/org/apache/solr/request/StandardRequestHandler.java
incubator/solr/trunk/src/java/org/apache/solr/search/QueryParsing.java
incubator/solr/trunk/src/java/org/apache/solr/search/SolrQueryParser.java
Modified: incubator/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/solr/trunk/CHANGES.txt?view=diff&rev=443053&r1=443052&r2=443053
==============================================================================
--- incubator/solr/trunk/CHANGES.txt (original)
+++ incubator/solr/trunk/CHANGES.txt Wed Sep 13 11:17:21 2006
@@ -5,7 +5,7 @@
1. added support for setting Lucene's positionIncrementGap
2. Admin: new statistics for SolrIndexSearcher
3. Admin: caches now show config params on stats page
- 3. max() function added to FunctionQuery suite
+ 3. max() function added to FunctionQuery suite
4. postOptimize hook, mirroring the functionallity of the postCommit hook,
but only called on an index optimize.
5. Ability to HTTP POST query requests to /select in addition to HTTP-GET
@@ -21,7 +21,7 @@
12. Ability to store term vectors for fields. (Mike Klaas via yonik, SOLR-23)
13. New abstract BufferedTokenStream for people who want to write
Tokenizers or TokenFilters that require arbitrary buffering of the
- stream. (SOLR-11 / yonik, hossman)
+ stream. (SOLR-11 / yonik, hossman)
14. New RemoveDuplicatesToken - useful in situations where
synonyms, stemming, or word-deliminater-ing produce identical tokens at
the same position. (SOLR-11 / yonik, hossman)
@@ -53,6 +53,8 @@
solrconfig.xml, support has been added for configuring values to be
appended to the multi-val request params, as well as for configuring
invariant params that can not overridden in the query. (hossman, SOLR-46)
+26. Default operator for query parsing can now be specified with q.op=AND|OR
+ from the client request, overriding the schema value. (ehatcher)
Changes in runtime behavior
1. classes reorganized into different packages, package names changed to Apache
Modified: incubator/solr/trunk/src/java/org/apache/solr/request/StandardRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/solr/trunk/src/java/org/apache/solr/request/StandardRequestHandler.java?view=diff&rev=443053&r1=443052&r2=443053
==============================================================================
--- incubator/solr/trunk/src/java/org/apache/solr/request/StandardRequestHandler.java (original)
+++ incubator/solr/trunk/src/java/org/apache/solr/request/StandardRequestHandler.java Wed Sep 13 11:17:21 2006
@@ -105,7 +105,7 @@
List<String> commands = StrUtils.splitSmart(sreq,';');
String qs = commands.size() >= 1 ? commands.get(0) : "";
- Query query = QueryParsing.parseQuery(qs, defaultField, req.getSchema());
+ Query query = QueryParsing.parseQuery(qs, defaultField, p, req.getSchema());
// If the first non-query, non-filter command is a simple sort on an indexed field, then
// we can use the Lucene sort ability.
Modified: incubator/solr/trunk/src/java/org/apache/solr/search/QueryParsing.java
URL: http://svn.apache.org/viewvc/incubator/solr/trunk/src/java/org/apache/solr/search/QueryParsing.java?view=diff&rev=443053&r1=443052&r2=443053
==============================================================================
--- incubator/solr/trunk/src/java/org/apache/solr/search/QueryParsing.java (original)
+++ incubator/solr/trunk/src/java/org/apache/solr/search/QueryParsing.java Wed Sep 13 11:17:21 2006
@@ -19,6 +19,7 @@
import org.apache.lucene.search.*;
import org.apache.solr.search.function.*;
import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.Term;
import org.apache.solr.core.SolrCore;
@@ -26,6 +27,7 @@
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.schema.FieldType;
+import org.apache.solr.request.SolrParams;
import java.util.ArrayList;
import java.util.regex.Pattern;
@@ -37,6 +39,7 @@
* @version $Id$
*/
public class QueryParsing {
+ public static final String OP = "q.op";
public static Query parseQuery(String qs, IndexSchema schema) {
return parseQuery(qs, null, schema);
@@ -58,7 +61,32 @@
}
}
+ /**
+ * @param qs query expression
+ * @param defaultField default field used for unqualified search terms in the query expression
+ * @param params used to determine the default operator, overriding the schema specified operator
+ * @param schema used for default operator (overridden by params) and passed to the query parser for field format analysis information
+ * @return
+ */
+ public static Query parseQuery(String qs, String defaultField, SolrParams params, IndexSchema schema) {
+ try {
+ String opParam = params.get(OP, schema.getQueryParserDefaultOperator());
+ QueryParser.Operator defaultOperator = "AND".equals(opParam) ? QueryParser.Operator.AND : QueryParser.Operator.OR;
+ SolrQueryParser parser = new SolrQueryParser(schema, defaultField);
+ parser.setDefaultOperator(defaultOperator);
+ Query query = parser.parse(qs);
+
+ if (SolrCore.log.isLoggable(Level.FINEST)) {
+ SolrCore.log.finest("After QueryParser:" + query);
+ }
+
+ return query;
+ } catch (ParseException e) {
+ SolrCore.log(e);
+ throw new SolrException(400,"Error parsing Lucene query",e);
+ }
+ }
/***
* SortSpec encapsulates a Lucene Sort and a count of the number of documents
Modified: incubator/solr/trunk/src/java/org/apache/solr/search/SolrQueryParser.java
URL: http://svn.apache.org/viewvc/incubator/solr/trunk/src/java/org/apache/solr/search/SolrQueryParser.java?view=diff&rev=443053&r1=443052&r2=443053
==============================================================================
--- incubator/solr/trunk/src/java/org/apache/solr/search/SolrQueryParser.java (original)
+++ incubator/solr/trunk/src/java/org/apache/solr/search/SolrQueryParser.java Wed Sep 13 11:17:21 2006
@@ -33,11 +33,15 @@
public class SolrQueryParser extends QueryParser {
protected final IndexSchema schema;
+ /**
+ *
+ * @param schema Used for default search field name if defaultField is null and field information is used for analysis
+ * @param defaultField default field used for unspecified search terms. if null, the schema default field is used
+ */
public SolrQueryParser(IndexSchema schema, String defaultField) {
super(defaultField == null ? schema.getDefaultSearchFieldName() : defaultField, schema.getQueryAnalyzer());
this.schema = schema;
setLowercaseExpandedTerms(false);
- setDefaultOperator("AND".equals(schema.getQueryParserDefaultOperator()) ? QueryParser.Operator.AND : QueryParser.Operator.OR);
}
protected Query getFieldQuery(String field, String queryText) throws ParseException {