X-Git-Url: https://git.mdrn.pl/pylucene.git/blobdiff_plain/a2e61f0c04805cfcb8706176758d1283c7e3a55c..aaeed5504b982cf3545252ab528713250aa33eed:/lucene-java-3.5.0/lucene/contrib/queryparser/src/java/org/apache/lucene/queryParser/surround/query/FieldsQuery.java diff --git a/lucene-java-3.5.0/lucene/contrib/queryparser/src/java/org/apache/lucene/queryParser/surround/query/FieldsQuery.java b/lucene-java-3.5.0/lucene/contrib/queryparser/src/java/org/apache/lucene/queryParser/surround/query/FieldsQuery.java new file mode 100644 index 0000000..daea96d --- /dev/null +++ b/lucene-java-3.5.0/lucene/contrib/queryparser/src/java/org/apache/lucene/queryParser/surround/query/FieldsQuery.java @@ -0,0 +1,96 @@ +package org.apache.lucene.queryParser.surround.query; +/** + * 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. + */ + +import java.util.ArrayList; +import java.util.List; +import java.util.Iterator; + +import org.apache.lucene.search.Query; + +public class FieldsQuery extends SrndQuery { /* mostly untested */ + private SrndQuery q; + private List fieldNames; + private final char fieldOp; + private final String OrOperatorName = "OR"; /* for expanded queries, not normally visible */ + + public FieldsQuery(SrndQuery q, List fieldNames, char fieldOp) { + this.q = q; + this.fieldNames = fieldNames; + this.fieldOp = fieldOp; + } + + public FieldsQuery(SrndQuery q, String fieldName, char fieldOp) { + this.q = q; + fieldNames = new ArrayList(); + fieldNames.add(fieldName); + this.fieldOp = fieldOp; + } + + @Override + public boolean isFieldsSubQueryAcceptable() { + return false; + } + + public Query makeLuceneQueryNoBoost(BasicQueryFactory qf) { + if (fieldNames.size() == 1) { /* single field name: no new queries needed */ + return q.makeLuceneQueryFieldNoBoost(fieldNames.get(0), qf); + } else { /* OR query over the fields */ + List queries = new ArrayList(); + Iterator fni = getFieldNames().listIterator(); + SrndQuery qc; + while (fni.hasNext()) { + qc = (SrndQuery) q.clone(); + queries.add( new FieldsQuery( qc, fni.next(), fieldOp)); + } + OrQuery oq = new OrQuery(queries, + true /* infix OR for field names */, + OrOperatorName); + System.out.println(getClass().toString() + ", fields expanded: " + oq.toString()); /* needs testing */ + return oq.makeLuceneQueryField(null, qf); + } + } + + @Override + public Query makeLuceneQueryFieldNoBoost(String fieldName, BasicQueryFactory qf) { + return makeLuceneQueryNoBoost(qf); /* use this.fieldNames instead of fieldName */ + } + + + public List getFieldNames() {return fieldNames;} + + public char getFieldOperator() { return fieldOp;} + + @Override + public String toString() { + StringBuilder r = new StringBuilder(); + r.append("("); + fieldNamesToString(r); + r.append(q.toString()); + r.append(")"); + return r.toString(); + } + + protected void fieldNamesToString(StringBuilder r) { + Iterator fni = getFieldNames().listIterator(); + while (fni.hasNext()) { + r.append(fni.next()); + r.append(getFieldOperator()); + } + } +} +