blob: 4ecb30f6e5f80b3ab9b6faf711ad715b8bb9b976 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.queryparser.surround.query;
import org.apache.lucene.search.BoostQuery;
import org.apache.lucene.search.Query;
/** Lowest level base class for surround queries */
public abstract class SrndQuery implements Cloneable {
public SrndQuery() {}
private float weight = (float) 1.0;
private boolean weighted = false;
public void setWeight(float w) {
weight = w; /* as parsed from the query text */
weighted = true;
}
public boolean isWeighted() {return weighted;}
public float getWeight() { return weight; }
public String getWeightString() {return Float.toString(getWeight());}
public String getWeightOperator() {return "^";}
protected void weightToString(StringBuilder r) { /* append the weight part of a query */
if (isWeighted()) {
r.append(getWeightOperator());
r.append(getWeightString());
}
}
public Query makeLuceneQueryField(String fieldName, BasicQueryFactory qf){
Query q = makeLuceneQueryFieldNoBoost(fieldName, qf);
if (isWeighted()) {
q = new BoostQuery(q, getWeight()); /* weight may be at any level in a SrndQuery */
}
return q;
}
public abstract Query makeLuceneQueryFieldNoBoost(String fieldName, BasicQueryFactory qf);
/** This method is used by {@link #hashCode()} and {@link #equals(Object)},
* see LUCENE-2945.
*/
@Override
public abstract String toString();
public boolean isFieldsSubQueryAcceptable() {return true;}
@Override
public SrndQuery clone() {
try {
return (SrndQuery)super.clone();
} catch (CloneNotSupportedException cns) {
throw new Error(cns);
}
}
/** For subclasses of {@link SrndQuery} within the package
* {@link org.apache.lucene.queryparser.surround.query}
* it is not necessary to override this method,
* @see #toString()
*/
@Override
public int hashCode() {
return getClass().hashCode() ^ toString().hashCode();
}
/** For subclasses of {@link SrndQuery} within the package
* {@link org.apache.lucene.queryparser.surround.query}
* it is not necessary to override this method,
* @see #toString()
*/
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (! getClass().equals(obj.getClass()))
return false;
return toString().equals(obj.toString());
}
}