// Copyright (c) 2014 Couchbase, Inc. // // 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 bleve import ( "time" "github.com/blevesearch/bleve/search/query" ) // NewBoolFieldQuery creates a new Query for boolean fields func NewBoolFieldQuery(val bool) *query.BoolFieldQuery { return query.NewBoolFieldQuery(val) } // NewBooleanQuery creates a compound Query composed // of several other Query objects. // These other query objects are added using the // AddMust() AddShould() and AddMustNot() methods. // Result documents must satisfy ALL of the // must Queries. // Result documents must satisfy NONE of the must not // Queries. // Result documents that ALSO satisfy any of the should // Queries will score higher. func NewBooleanQuery() *query.BooleanQuery { return query.NewBooleanQuery(nil, nil, nil) } // NewConjunctionQuery creates a new compound Query. // Result documents must satisfy all of the queries. func NewConjunctionQuery(conjuncts ...query.Query) *query.ConjunctionQuery { return query.NewConjunctionQuery(conjuncts) } // NewDateRangeQuery creates a new Query for ranges // of date values. // Date strings are parsed using the DateTimeParser configured in the // top-level config.QueryDateTimeParser // Either, but not both endpoints can be nil. func NewDateRangeQuery(start, end time.Time) *query.DateRangeQuery { return query.NewDateRangeQuery(start, end) } // NewDateRangeInclusiveQuery creates a new Query for ranges // of date values. // Date strings are parsed using the DateTimeParser configured in the // top-level config.QueryDateTimeParser // Either, but not both endpoints can be nil. // startInclusive and endInclusive control inclusion of the endpoints. func NewDateRangeInclusiveQuery(start, end time.Time, startInclusive, endInclusive *bool) *query.DateRangeQuery { return query.NewDateRangeInclusiveQuery(start, end, startInclusive, endInclusive) } // NewDisjunctionQuery creates a new compound Query. // Result documents satisfy at least one Query. func NewDisjunctionQuery(disjuncts ...query.Query) *query.DisjunctionQuery { return query.NewDisjunctionQuery(disjuncts) } // NewDocIDQuery creates a new Query object returning indexed documents among // the specified set. Combine it with ConjunctionQuery to restrict the scope of // other queries output. func NewDocIDQuery(ids []string) *query.DocIDQuery { return query.NewDocIDQuery(ids) } // NewFuzzyQuery creates a new Query which finds // documents containing terms within a specific // fuzziness of the specified term. // The default fuzziness is 1. // // The current implementation uses Levenshtein edit // distance as the fuzziness metric. func NewFuzzyQuery(term string) *query.FuzzyQuery { return query.NewFuzzyQuery(term) } // NewMatchAllQuery creates a Query which will // match all documents in the index. func NewMatchAllQuery() *query.MatchAllQuery { return query.NewMatchAllQuery() } // NewMatchNoneQuery creates a Query which will not // match any documents in the index. func NewMatchNoneQuery() *query.MatchNoneQuery { return query.NewMatchNoneQuery() } // NewMatchPhraseQuery creates a new Query object // for matching phrases in the index. // An Analyzer is chosen based on the field. // Input text is analyzed using this analyzer. // Token terms resulting from this analysis are // used to build a search phrase. Result documents // must match this phrase. Queried field must have been indexed with // IncludeTermVectors set to true. func NewMatchPhraseQuery(matchPhrase string) *query.MatchPhraseQuery { return query.NewMatchPhraseQuery(matchPhrase) } // NewMatchQuery creates a Query for matching text. // An Analyzer is chosen based on the field. // Input text is analyzed using this analyzer. // Token terms resulting from this analysis are // used to perform term searches. Result documents // must satisfy at least one of these term searches. func NewMatchQuery(match string) *query.MatchQuery { return query.NewMatchQuery(match) } // NewNumericRangeQuery creates a new Query for ranges // of numeric values. // Either, but not both endpoints can be nil. // The minimum value is inclusive. // The maximum value is exclusive. func NewNumericRangeQuery(min, max *float64) *query.NumericRangeQuery { return query.NewNumericRangeQuery(min, max) } // NewNumericRangeInclusiveQuery creates a new Query for ranges // of numeric values. // Either, but not both endpoints can be nil. // Control endpoint inclusion with inclusiveMin, inclusiveMax. func NewNumericRangeInclusiveQuery(min, max *float64, minInclusive, maxInclusive *bool) *query.NumericRangeQuery { return query.NewNumericRangeInclusiveQuery(min, max, minInclusive, maxInclusive) } // NewTermRangeQuery creates a new Query for ranges // of text terms. // Either, but not both endpoints can be "". // The minimum value is inclusive. // The maximum value is exclusive. func NewTermRangeQuery(min, max string) *query.TermRangeQuery { return query.NewTermRangeQuery(min, max) } // NewTermRangeInclusiveQuery creates a new Query for ranges // of text terms. // Either, but not both endpoints can be "". // Control endpoint inclusion with inclusiveMin, inclusiveMax. func NewTermRangeInclusiveQuery(min, max string, minInclusive, maxInclusive *bool) *query.TermRangeQuery { return query.NewTermRangeInclusiveQuery(min, max, minInclusive, maxInclusive) } // NewPhraseQuery creates a new Query for finding // exact term phrases in the index. // The provided terms must exist in the correct // order, at the correct index offsets, in the // specified field. Queried field must have been indexed with // IncludeTermVectors set to true. func NewPhraseQuery(terms []string, field string) *query.PhraseQuery { return query.NewPhraseQuery(terms, field) } // NewPrefixQuery creates a new Query which finds // documents containing terms that start with the // specified prefix. func NewPrefixQuery(prefix string) *query.PrefixQuery { return query.NewPrefixQuery(prefix) } // NewRegexpQuery creates a new Query which finds // documents containing terms that match the // specified regular expression. func NewRegexpQuery(regexp string) *query.RegexpQuery { return query.NewRegexpQuery(regexp) } // NewQueryStringQuery creates a new Query used for // finding documents that satisfy a query string. The // query string is a small query language for humans. func NewQueryStringQuery(q string) *query.QueryStringQuery { return query.NewQueryStringQuery(q) } // NewTermQuery creates a new Query for finding an // exact term match in the index. func NewTermQuery(term string) *query.TermQuery { return query.NewTermQuery(term) } // NewWildcardQuery creates a new Query which finds // documents containing terms that match the // specified wildcard. In the wildcard pattern '*' // will match any sequence of 0 or more characters, // and '?' will match any single character. func NewWildcardQuery(wildcard string) *query.WildcardQuery { return query.NewWildcardQuery(wildcard) } // NewGeoBoundingBoxQuery creates a new Query for performing geo bounding // box searches. The arguments describe the position of the box and documents // which have an indexed geo point inside the box will be returned. func NewGeoBoundingBoxQuery(topLeftLon, topLeftLat, bottomRightLon, bottomRightLat float64) *query.GeoBoundingBoxQuery { return query.NewGeoBoundingBoxQuery(topLeftLon, topLeftLat, bottomRightLon, bottomRightLat) } // NewGeoDistanceQuery creates a new Query for performing geo distance // searches. The arguments describe a position and a distance. Documents // which have an indexed geo point which is less than or equal to the provided // distance from the given position will be returned. func NewGeoDistanceQuery(lon, lat float64, distance string) *query.GeoDistanceQuery { return query.NewGeoDistanceQuery(lon, lat, distance) }