reverting some of Erik's recent changes to the SolrQueryParser constructor and implementing the intent in a new IndexSchema.getSolrQueryParser method

git-svn-id: https://svn.apache.org/repos/asf/lucene/solr/trunk@510689 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Chris M. Hostetter 2007-02-22 22:18:02 +00:00
parent bebe033fb5
commit 81fef0c161
7 changed files with 44 additions and 9 deletions

View File

@ -130,6 +130,13 @@ Changes in runtime behavior
listings). Fix JSON output bug for null values. Internal JAVA API: listings). Fix JSON output bug for null values. Internal JAVA API:
change most uses of NamedList to SimpleOrderedMap. (yonik) change most uses of NamedList to SimpleOrderedMap. (yonik)
3. A new method "getSolrQueryParser" has been added to the IndexSchema
class for retrieving a new SolrQueryParser instance with all options
specified in the schema.xml's <solrQueryParser> block set. The
documentation for the SolrQueryParser constructor and it's use of
IndexSchema have also been clarified.
(Erik Hatcher and hossman)
Optimizations Optimizations
1. SOLR-114: HashDocSet specific implementations of union() and andNot() 1. SOLR-114: HashDocSet specific implementations of union() and andNot()
for a 20x performance improvement for those set operations, and a new for a 20x performance improvement for those set operations, and a new

View File

@ -182,7 +182,7 @@ public class DisMaxRequestHandler extends RequestHandlerBase {
int qslop = params.getInt(DMP.QS, 0); int qslop = params.getInt(DMP.QS, 0);
/* a generic parser for parsing regular lucene queries */ /* a generic parser for parsing regular lucene queries */
QueryParser p = new SolrQueryParser(schema, null); QueryParser p = schema.getSolrQueryParser(null);
/* a parser for dealing with user input, which will convert /* a parser for dealing with user input, which will convert
* things to DisjunctionMaxQueries * things to DisjunctionMaxQueries

View File

@ -106,7 +106,7 @@ public class SimpleFacets {
* If user doesn't want schema default for facet.query, they should be * If user doesn't want schema default for facet.query, they should be
* explicit. * explicit.
*/ */
SolrQueryParser qp = new SolrQueryParser(searcher.getSchema(),null); SolrQueryParser qp = searcher.getSchema().getSolrQueryParser(null);
String[] facetQs = params.getParams(SolrParams.FACET_QUERY); String[] facetQs = params.getParams(SolrParams.FACET_QUERY);
if (null != facetQs && 0 != facetQs.length) { if (null != facetQs && 0 != facetQs.length) {

View File

@ -23,11 +23,13 @@ import org.apache.lucene.document.Field;
import org.apache.lucene.document.Fieldable; import org.apache.lucene.document.Fieldable;
import org.apache.lucene.search.DefaultSimilarity; import org.apache.lucene.search.DefaultSimilarity;
import org.apache.lucene.search.Similarity; import org.apache.lucene.search.Similarity;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.solr.core.SolrException; import org.apache.solr.core.SolrException;
import org.apache.solr.core.Config; import org.apache.solr.core.Config;
import org.apache.solr.analysis.TokenFilterFactory; import org.apache.solr.analysis.TokenFilterFactory;
import org.apache.solr.analysis.TokenizerChain; import org.apache.solr.analysis.TokenizerChain;
import org.apache.solr.analysis.TokenizerFactory; import org.apache.solr.analysis.TokenizerFactory;
import org.apache.solr.search.SolrQueryParser;
import org.apache.solr.util.DOMUtil; import org.apache.solr.util.DOMUtil;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap; import org.w3c.dom.NamedNodeMap;
@ -149,12 +151,33 @@ public final class IndexSchema {
private String defaultSearchFieldName=null; private String defaultSearchFieldName=null;
private String queryParserDefaultOperator = "OR"; private String queryParserDefaultOperator = "OR";
/** Name of the default search field specified in the schema file */ /**
* A SolrQueryParser linked to this IndexSchema for field datatype
* information, and populated with default options from the
* &lt;solrQueryParser&gt; configuration for this IndexSchema.
*
* @param defaultField if non-null overrides the schema default
*/
public SolrQueryParser getSolrQueryParser(String defaultField) {
SolrQueryParser qp = new SolrQueryParser(this,defaultField);
String operator = getQueryParserDefaultOperator();
qp.setDefaultOperator("AND".equals(operator) ?
QueryParser.Operator.AND : QueryParser.Operator.OR);
return qp;
}
/**
* Name of the default search field specified in the schema file
* @deprecated use getSolrQueryParser().getField()
*/
public String getDefaultSearchFieldName() { public String getDefaultSearchFieldName() {
return defaultSearchFieldName; return defaultSearchFieldName;
} }
/** default operator ("AND" or "OR") for QueryParser */ /**
* default operator ("AND" or "OR") for QueryParser
* @deprecated use getSolrQueryParser().getDefaultOperator()
*/
public String getQueryParserDefaultOperator() { public String getQueryParserDefaultOperator() {
return queryParserDefaultOperator; return queryParserDefaultOperator;
} }

View File

@ -62,7 +62,7 @@ public class QueryParsing {
*/ */
public static Query parseQuery(String qs, String defaultField, IndexSchema schema) { public static Query parseQuery(String qs, String defaultField, IndexSchema schema) {
try { try {
Query query = new SolrQueryParser(schema, defaultField).parse(qs); Query query = schema.getSolrQueryParser(defaultField).parse(qs);
if (SolrCore.log.isLoggable(Level.FINEST)) { if (SolrCore.log.isLoggable(Level.FINEST)) {
SolrCore.log.finest("After QueryParser:" + query); SolrCore.log.finest("After QueryParser:" + query);
@ -85,7 +85,7 @@ public class QueryParsing {
*/ */
public static Query parseQuery(String qs, String defaultField, SolrParams params, IndexSchema schema) { public static Query parseQuery(String qs, String defaultField, SolrParams params, IndexSchema schema) {
try { try {
SolrQueryParser parser = new SolrQueryParser(schema, defaultField); SolrQueryParser parser = schema.getSolrQueryParser(defaultField);
String opParam = params.get(OP); String opParam = params.get(OP);
if (opParam != null) { if (opParam != null) {
parser.setDefaultOperator("AND".equals(opParam) ? QueryParser.Operator.AND : QueryParser.Operator.OR); parser.setDefaultOperator("AND".equals(opParam) ? QueryParser.Operator.AND : QueryParser.Operator.OR);

View File

@ -52,16 +52,19 @@ public class SolrQueryParser extends QueryParser {
protected final IndexSchema schema; protected final IndexSchema schema;
/** /**
* Constructs a SolrQueryParser using the schema to understand the
* formats and datatypes of each field. Only the defaultSearchField
* will be used from the IndexSchema (unless overridden),
* &lt;solrQueryParser&gt; will not be used.
* *
* @param schema Used for default search field name if defaultField is null and field information is used for analysis * @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 * @param defaultField default field used for unspecified search terms. if null, the schema default field is used
* @see IndexSchema.getSolrQueryParser
*/ */
public SolrQueryParser(IndexSchema schema, String defaultField) { public SolrQueryParser(IndexSchema schema, String defaultField) {
super(defaultField == null ? schema.getDefaultSearchFieldName() : defaultField, schema.getQueryAnalyzer()); super(defaultField == null ? schema.getDefaultSearchFieldName() : defaultField, schema.getQueryAnalyzer());
this.schema = schema; this.schema = schema;
setLowercaseExpandedTerms(false); setLowercaseExpandedTerms(false);
String operator = schema.getQueryParserDefaultOperator();
setDefaultOperator("AND".equals(operator) ? QueryParser.Operator.AND : QueryParser.Operator.OR);
} }
protected Query getFieldQuery(String field, String queryText) throws ParseException { protected Query getFieldQuery(String field, String queryText) throws ParseException {

View File

@ -700,6 +700,8 @@ public class SolrPluginUtils {
public DisjunctionMaxQueryParser(IndexSchema s, String defaultField) { public DisjunctionMaxQueryParser(IndexSchema s, String defaultField) {
super(s,defaultField); super(s,defaultField);
// don't trust that our parent class won't ever change it's default
setDefaultOperator(QueryParser.Operator.OR);
} }
public DisjunctionMaxQueryParser(IndexSchema s) { public DisjunctionMaxQueryParser(IndexSchema s) {
this(s,null); this(s,null);