1// Copyright (c) 2014 Couchbase, Inc. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package query 16 17import ( 18 "github.com/blevesearch/bleve/index" 19 "github.com/blevesearch/bleve/mapping" 20 "github.com/blevesearch/bleve/search" 21 "github.com/blevesearch/bleve/search/searcher" 22) 23 24type TermQuery struct { 25 Term string `json:"term"` 26 FieldVal string `json:"field,omitempty"` 27 BoostVal *Boost `json:"boost,omitempty"` 28} 29 30// NewTermQuery creates a new Query for finding an 31// exact term match in the index. 32func NewTermQuery(term string) *TermQuery { 33 return &TermQuery{ 34 Term: term, 35 } 36} 37 38func (q *TermQuery) SetBoost(b float64) { 39 boost := Boost(b) 40 q.BoostVal = &boost 41} 42 43func (q *TermQuery) Boost() float64 { 44 return q.BoostVal.Value() 45} 46 47func (q *TermQuery) SetField(f string) { 48 q.FieldVal = f 49} 50 51func (q *TermQuery) Field() string { 52 return q.FieldVal 53} 54 55func (q *TermQuery) Searcher(i index.IndexReader, m mapping.IndexMapping, options search.SearcherOptions) (search.Searcher, error) { 56 field := q.FieldVal 57 if q.FieldVal == "" { 58 field = m.DefaultSearchField() 59 } 60 return searcher.NewTermSearcher(i, q.Term, field, q.BoostVal.Value(), options) 61} 62