All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.pageseeder.flint.lucene.query.PredicateSearchQuery Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2015 Allette Systems (Australia)
 * http://www.allette.com.au
 *
 * Licensed 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.pageseeder.flint.lucene.query;

import java.io.IOException;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.SortField.Type;
import org.pageseeder.xmlwriter.XMLWriter;

/**
 * A search query to submit a predicate directly to the index.
 *
 * 

This query uses the Lucene {@link QueryParser} to create a valid query instance from the * supplied predicate. * * @author Christophe Lauret (Weborganic) * @author Jean-Baptiste Reure (Weborganic) * * @version 2 August 2010 */ public final class PredicateSearchQuery implements SearchQuery { /** * Bypasses all the other query parameters. */ private final String _predicate; /** * The analyser used in this query. */ private final Analyzer _analyser; /** * The sort order. */ private final Sort _sort; /** * The default field. */ private final String _defaultfield; /** * A flag to specify if wildcard ('*' or '?') is allowed as the first character of the predicate. */ private boolean _allowLeadingWildcard = false; /** * Creates new predicate search query. * * @param predicate The predicate for this query. * @param sortField The field name to use to order the results. * * @throws IllegalArgumentException If the predicate is null. */ public PredicateSearchQuery(String predicate, String sortField) throws IllegalArgumentException { this(predicate, sortField == null ? Sort.INDEXORDER : new Sort(new SortField(sortField, Type.STRING))); } /** * Creates new predicate search query. * * @param predicate The predicate for this query. * @param analyzer The analyzer to use for the query, should be the same as the one used to write the Index. * @param sortField The field name to use to order the results. * * @throws IllegalArgumentException If the predicate is null. */ public PredicateSearchQuery(String predicate, Analyzer analyzer, String sortField) throws IllegalArgumentException { this(predicate, analyzer, sortField == null ? Sort.INDEXORDER : new Sort(new SortField(sortField, Type.STRING))); } /** * Creates new predicate search query. * * @param predicate The predicate for this query. * * @throws IllegalArgumentException If the predicate is null. */ public PredicateSearchQuery(String predicate) throws IllegalArgumentException { this(predicate, Sort.INDEXORDER); } /** * Creates new predicate search query. * * @param predicate The predicate for this query. * @param analyzer The analyzer to use for the query, should be the same as the one used to write the Index. * * @throws IllegalArgumentException If the predicate is null. */ public PredicateSearchQuery(String predicate, Analyzer analyzer) throws IllegalArgumentException { this(predicate, analyzer, Sort.INDEXORDER); } /** * Creates new predicate search query. * * @param predicate The predicate for this query. * @param sort The sort order for the results. * * @throws IllegalArgumentException If the predicate is null. */ public PredicateSearchQuery(String predicate, Sort sort) throws IllegalArgumentException { this(predicate, new StandardAnalyzer(), sort); } /** * Creates new predicate search query. * * @param predicate The predicate for this query. * @param analyzer The analyzer to use for the query, should be the same as the one used to write the Index. * @param sort The sort order for the results. * * @throws IllegalArgumentException If the predicate is null. */ public PredicateSearchQuery(String predicate, Analyzer analyzer, Sort sort) throws IllegalArgumentException { this(predicate, analyzer, null, sort); } /** * Creates new predicate search query. * * @param predicate The predicate for this query. * @param analyzer The analyzer to use for the query, should be the same as the one used to write the Index. * @param defaultfield The default field * @param sort The sort order for the results. * * @throws IllegalArgumentException If the predicate is null. */ public PredicateSearchQuery(String predicate, Analyzer analyzer, String defaultfield, Sort sort) throws IllegalArgumentException { if (predicate == null) throw new IllegalArgumentException("predicate is null"); this._predicate = predicate; this._analyser = analyzer; this._defaultfield = defaultfield; this._sort = sort; } // getters and setters // -------------------------------------------------------------------------------------------- /** * Whether a wildcard ('*' or '?') is allowed as the first character of the predicate. * * @param allowWildCardStart true if wildcard should be allowed, false otherwise */ public void setAllowWildCardStart(boolean allowWildCardStart) { this._allowLeadingWildcard = allowWildCardStart; } /** * Returns the Lucene query instance corresponding to this object. * *

* This method uses a query parser to parse the predicate. * * @return The Lucene query instance or null if the predicate was null. */ @Override public Query toQuery() { if (this._predicate == null) return null; try { QueryParser parser = new QueryParser(this._defaultfield, this._analyser); parser.setAllowLeadingWildcard(this._allowLeadingWildcard); return parser.parse(this._predicate); } catch (ParseException ex) { return null; } } /** * Returns true if the predicate has not been set. * * @return true if the predicate has not been set; false otherwise. */ @Override public boolean isEmpty() { return this._predicate == null; } /** * Serialises the search query as XML. * *

{@code
   *   
   *     [predicate]
   *   
   * }
* * @param xml The XML writer. * * @throws IOException Should there be any I/O exception while writing the XML. */ @Override public void toXML(XMLWriter xml) throws IOException { xml.openElement("search-query", true); xml.element("predicate", this._predicate); xml.closeElement(); } /** * Returns the sort order. * * @return the sorting rules for the search results */ @Override public Sort getSort() { return this._sort; } @Override public String toString() { return this._predicate; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy