My application needs the QueryParser (by way of QueryParsing) to be set to AND mode, not the default of OR. There isn't currently a setting to control this.

I've added it locally using the patch below. Any objections to me committing this?

I actually feel strongly that the default setting should be AND instead of OR, but I left it at OR in this patch for backwards compatibility :) (but would gladly change it to AND if there is consensus).

Thanks,
        Erik


Index: src/java/org/apache/solr/schema/IndexSchema.java
===================================================================
--- src/java/org/apache/solr/schema/IndexSchema.java (revision 423124)
+++ src/java/org/apache/solr/schema/IndexSchema.java    (working copy)
@@ -140,12 +140,18 @@
   public Analyzer getQueryAnalyzer() { return queryAnalyzer; }
   private String defaultSearchFieldName=null;
+  private String queryParserDefaultOperator = "OR";
   /** Name of the default search field specified in the schema file */
   public String getDefaultSearchFieldName() {
     return defaultSearchFieldName;
   }
+  /** default operator ("AND" or "OR") for QueryParser */
+  public String getQueryParserDefaultOperator() {
+    return queryParserDefaultOperator;
+  }
+
   private SchemaField uniqueKeyField;
   /**
@@ -366,6 +372,14 @@
       log.info("default search field is "+defaultSearchFieldName);
     }
+ node = (Node) xpath.evaluate("/schema/queryParserDefaultOperator/ text()", document, XPathConstants.NODE);
+    if (node==null) {
+ log.warning("no query parser default operator specified in schema.");
+    } else {
+      queryParserDefaultOperator=node.getNodeValue().trim();
+ log.info("query parser default operator is "+queryParserDefaultOperator);
+    }
+
node = (Node) xpath.evaluate("/schema/uniqueKey/text()", document, XPathConstants.NODE);
     if (node==null) {
       log.warning("no uniqueKey specified in schema.");
Index: src/java/org/apache/solr/search/SolrQueryParser.java
===================================================================
--- src/java/org/apache/solr/search/SolrQueryParser.java (revision 423124) +++ src/java/org/apache/solr/search/SolrQueryParser.java (working copy)
@@ -37,6 +37,7 @@
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 {

Reply via email to