/* * Copyright 2004-2009 the original author or authors. * * 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.compass.core.lucene.engine.query; import java.io.Reader; import org.apache.lucene.index.Term; import org.apache.lucene.search.ConstantScoreRangeQuery; import org.apache.lucene.search.FuzzyQuery; import org.apache.lucene.search.MatchAllDocsQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.RangeQuery; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.search.spans.SpanFirstQuery; import org.apache.lucene.search.spans.SpanNotQuery; import org.apache.lucene.search.spans.SpanQuery; import org.apache.lucene.search.spans.SpanTermQuery; import org.compass.core.Resource; import org.compass.core.engine.SearchEngine; import org.compass.core.engine.SearchEngineQuery; import org.compass.core.engine.SearchEngineQuery.SearchEngineSpanQuery; import org.compass.core.engine.SearchEngineQueryBuilder; import org.compass.core.lucene.engine.LuceneSearchEngine; import org.compass.core.lucene.engine.LuceneSearchEngineFactory; import org.compass.core.lucene.engine.LuceneSearchEngineQuery; import org.compass.core.lucene.engine.LuceneSearchEngineQuery.LuceneSearchEngineSpanQuery; import org.compass.core.lucene.search.ConstantScorePrefixQuery; /** * @author kimchy */ public class LuceneSearchEngineQueryBuilder implements SearchEngineQueryBuilder { private LuceneSearchEngineFactory searchEngineFactory; public LuceneSearchEngineQueryBuilder(LuceneSearchEngineFactory searchEngineFactory) { this.searchEngineFactory = searchEngineFactory; } public SearchEngineBooleanQueryBuilder bool() { return bool(false); } public SearchEngineBooleanQueryBuilder bool(boolean disableCoord) { return new LuceneSearchEngineBooleanQueryBuilder(searchEngineFactory, disableCoord); } public SearchEngineMultiPhraseQueryBuilder multiPhrase(String resourcePropertyName) { return new LuceneSearchEngineMultiPhraseQueryBuilder(searchEngineFactory, resourcePropertyName); } public SearchEngineQuery term(String resourcePropertyName, String value) { Query query = new TermQuery(new Term(resourcePropertyName, value)); return new LuceneSearchEngineQuery(searchEngineFactory, query); } public SearchEngineQuery between(String resourcePropertyName, String low, String high, boolean inclusive, boolean constantScore) { Query query; if (constantScore) { query = new ConstantScoreRangeQuery(resourcePropertyName, low, high, inclusive, inclusive); } else { Term lowTerm = null; if (low != null) { lowTerm = new Term(resourcePropertyName, low); } Term highTerm = null; if (high != null) { highTerm = new Term(resourcePropertyName, high); } query = new RangeQuery(lowTerm, highTerm, inclusive); } return new LuceneSearchEngineQuery(searchEngineFactory, query); } public SearchEngineQuery between(String resourcePropertyName, String low, String high, boolean inclusive) { return between(resourcePropertyName, low, high, inclusive, true); } public SearchEngineQuery ge(String resourcePropertyName, String value) { return between(resourcePropertyName, value, null, true); } public SearchEngineQuery gt(String resourcePropertyName, String value) { return between(resourcePropertyName, value, null, false); } public SearchEngineQuery le(String resourcePropertyName, String value) { return between(resourcePropertyName, null, value, true); } public SearchEngineQuery lt(String resourcePropertyName, String value) { return between(resourcePropertyName, null, value, false); } public SearchEngineQuery prefix(String resourcePropertyName, String prefix) { Query query = new ConstantScorePrefixQuery(new Term(resourcePropertyName, prefix)); return new LuceneSearchEngineQuery(searchEngineFactory, query); } public SearchEngineQuery wildcard(String resourcePropertyName, String wildcard) { Query query = new WildcardQuery(new Term(resourcePropertyName, wildcard)); return new LuceneSearchEngineQuery(searchEngineFactory, query); } public SearchEngineQuery matchAll() { return new LuceneSearchEngineQuery(searchEngineFactory, new MatchAllDocsQuery()); } public SearchEngineQuery fuzzy(String resourcePropertyName, String value, float minimumSimilarity) { Query query = new FuzzyQuery(new Term(resourcePropertyName, value), minimumSimilarity); return new LuceneSearchEngineQuery(searchEngineFactory, query); } public SearchEngineQuery fuzzy(String resourcePropertyName, String value, float minimumSimilarity, int prefixLength) { Query query = new FuzzyQuery(new Term(resourcePropertyName, value), minimumSimilarity, prefixLength); return new LuceneSearchEngineQuery(searchEngineFactory, query); } public SearchEngineQuery fuzzy(String resourcePropertyName, String value) { Query query = new FuzzyQuery(new Term(resourcePropertyName, value)); return new LuceneSearchEngineQuery(searchEngineFactory, query); } public SearchEngineQueryStringBuilder queryString(String queryString) { return new LuceneSearchEngineQueryStringBuilder(searchEngineFactory, queryString); } public SearchEngineMultiPropertyQueryStringBuilder multiPropertyQueryString(String queryString) { return new LuceneSearchEngineMultiPropertyQueryStringBuilder(searchEngineFactory, queryString); } public SearchEngineSpanQuery spanEq(String resourcePropertyName, String value) { SpanQuery spanQuery = new SpanTermQuery(new Term(resourcePropertyName, value)); return new LuceneSearchEngineQuery.LuceneSearchEngineSpanQuery(searchEngineFactory, spanQuery); } public SearchEngineSpanQuery spanFirst(SearchEngineSpanQuery searchEngineSpanQuery, int end) { SpanQuery spanQuery = new SpanFirstQuery(((LuceneSearchEngineSpanQuery) searchEngineSpanQuery).toSpanQuery(), end); return new LuceneSearchEngineQuery.LuceneSearchEngineSpanQuery(searchEngineFactory, spanQuery); } public SearchEngineSpanQuery spanFirst(String resourcePropertyName, String value, int end) { SpanQuery spanQuery = new SpanFirstQuery(new SpanTermQuery(new Term(resourcePropertyName, value)), end); return new LuceneSearchEngineQuery.LuceneSearchEngineSpanQuery(searchEngineFactory, spanQuery); } public SearchEngineQuerySpanNearBuilder spanNear(String resourcePropertyName) { return new LuceneSearchEngineQuerySpanNearBuilder(searchEngineFactory, resourcePropertyName); } public SearchEngineSpanQuery spanNot(SearchEngineSpanQuery include, SearchEngineSpanQuery exclude) { SpanNotQuery spanNotQuery = new SpanNotQuery(((LuceneSearchEngineSpanQuery) include).toSpanQuery(), ((LuceneSearchEngineSpanQuery) exclude).toSpanQuery()); return new LuceneSearchEngineQuery.LuceneSearchEngineSpanQuery(searchEngineFactory, spanNotQuery); } public SearchEngineQuerySpanOrBuilder spanOr() { return new LuceneSearchEngineQuerySpanOrBuilder(searchEngineFactory); } public SearchEngineMoreLikeThisQueryBuilder moreLikeThis(SearchEngine searchEngine, Resource idResource) { return new LuceneSearchEngineMoreLikeThisQueryBuilder((LuceneSearchEngine) searchEngine, searchEngineFactory, idResource); } public SearchEngineMoreLikeThisQueryBuilder moreLikeThis(SearchEngine searchEngine, Reader reader) { return new LuceneSearchEngineMoreLikeThisQueryBuilder((LuceneSearchEngine) searchEngine, searchEngineFactory, reader); } }