Documentation
¶
Overview ¶
Package bleve is a library for indexing and searching text.
Example Opening New Index, Indexing Data
message := struct{ Id: "example" From: "[email protected]", Body: "bleve indexing is easy", } mapping := bleve.NewIndexMapping() index, _ := bleve.New("example.bleve", mapping) index.Index(message.Id, message)
Example Opening Existing Index, Searching Data
index, _ := bleve.Open("example.bleve") query := bleve.NewQueryStringQuery("bleve") searchRequest := bleve.NewSearchRequest(query) searchResult, _ := index.Search(searchRequest)
Index ¶
- Variables
- func NewBooleanQuery(must []Query, should []Query, mustNot []Query) *booleanQuery
- func NewBooleanQueryMinShould(must []Query, should []Query, mustNot []Query, minShould float64) *booleanQuery
- func NewConjunctionQuery(conjuncts []Query) *conjunctionQuery
- func NewDateRangeInclusiveQuery(start, end *string, startInclusive, endInclusive *bool) *dateRangeQuery
- func NewDateRangeQuery(start, end *string) *dateRangeQuery
- func NewDisjunctionQuery(disjuncts []Query) *disjunctionQuery
- func NewDisjunctionQueryMin(disjuncts []Query, min float64) *disjunctionQuery
- func NewFuzzyQuery(term string) *fuzzyQuery
- func NewIndexAlias(indexes ...Index) *indexAliasImpl
- func NewMatchAllQuery() *matchAllQuery
- func NewMatchNoneQuery() *matchNoneQuery
- func NewMatchPhraseQuery(matchPhrase string) *matchPhraseQuery
- func NewMatchQuery(match string) *matchQuery
- func NewNumericRangeInclusiveQuery(min, max *float64, minInclusive, maxInclusive *bool) *numericRangeQuery
- func NewNumericRangeQuery(min, max *float64) *numericRangeQuery
- func NewPhraseQuery(terms []string, field string) *phraseQuery
- func NewPrefixQuery(prefix string) *prefixQuery
- func NewQueryStringQuery(query string) *queryStringQuery
- func NewTermQuery(term string) *termQuery
- func SetLog(l *log.Logger)
- type Batch
- type Classifier
- type DocumentMapping
- type Error
- type FacetRequest
- type FacetsRequest
- type FieldMapping
- type HighlightRequest
- type Index
- type IndexAlias
- type IndexMapping
- func (im *IndexMapping) AddCustomAnalyzer(name string, config map[string]interface{}) error
- func (im *IndexMapping) AddCustomCharFilter(name string, config map[string]interface{}) error
- func (im *IndexMapping) AddCustomDateTimeParser(name string, config map[string]interface{}) error
- func (im *IndexMapping) AddCustomTokenFilter(name string, config map[string]interface{}) error
- func (im *IndexMapping) AddCustomTokenMap(name string, config map[string]interface{}) error
- func (im *IndexMapping) AddCustomTokenizer(name string, config map[string]interface{}) error
- func (im *IndexMapping) AddDocumentMapping(doctype string, dm *DocumentMapping)
- func (im *IndexMapping) AnalyzeText(analyzerName string, text []byte) (analysis.TokenStream, error)
- func (im *IndexMapping) UnmarshalJSON(data []byte) error
- type IndexStat
- type IndexStats
- type Query
- type SearchRequest
- type SearchResult
Examples ¶
- DocumentMapping.AddFieldMapping
- DocumentMapping.AddFieldMappingsAt
- DocumentMapping.AddSubDocumentMapping
- FacetRequest.AddDateTimeRange
- FacetRequest.AddNumericRange
- Index (Indexing)
- New
- NewBooleanQuery
- NewBooleanQueryMinShould
- NewConjunctionQuery
- NewDisjunctionQuery
- NewDisjunctionQueryMin
- NewFacetRequest
- NewHighlight
- NewHighlightWithStyle
- NewMatchAllQuery
- NewMatchNoneQuery
- NewMatchPhraseQuery
- NewMatchQuery
- NewNumericRangeInclusiveQuery
- NewNumericRangeQuery
- NewPhraseQuery
- NewPrefixQuery
- NewQueryStringQuery
- NewSearchRequest
- NewTermQuery
- SearchRequest.AddFacet
Constants ¶
This section is empty.
Variables ¶
var Config *configuration
Config contains library level configuration
Functions ¶
func NewBooleanQuery ¶
NewBooleanQuery creates a compound Query composed of several other Query objects. Result documents must satisfy ALL of the must Queries. Result documents must satisfy NONE of the must not Queries. If there are any should queries, result documents must satisfy at least one of them.
Example ¶
must := make([]Query, 1) mustNot := make([]Query, 1) must[0] = NewMatchQuery("one") mustNot[0] = NewMatchQuery("great") query := NewBooleanQuery(must, nil, mustNot) searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 1
func NewBooleanQueryMinShould ¶
func NewBooleanQueryMinShould(must []Query, should []Query, mustNot []Query, minShould float64) *booleanQuery
NewBooleanQueryMinShould is the same as NewBooleanQuery, only it offers control of the minimum number of should queries that must be satisfied.
Example ¶
should := make([]Query, 2) should[0] = NewMatchQuery("great") should[1] = NewMatchQuery("one") query := NewBooleanQueryMinShould(nil, should, nil, float64(2)) searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 2
func NewConjunctionQuery ¶
func NewConjunctionQuery(conjuncts []Query) *conjunctionQuery
NewConjunctionQuery creates a new compound Query. Result documents must satisfy all of the queries.
Example ¶
conjuncts := make([]Query, 2) conjuncts[0] = NewMatchQuery("great") conjuncts[1] = NewMatchQuery("one") query := NewConjunctionQuery(conjuncts) searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 2
func NewDateRangeInclusiveQuery ¶
func NewDateRangeInclusiveQuery(start, end *string, startInclusive, endInclusive *bool) *dateRangeQuery
NewDateRangeInclusiveQuery creates a new Query for ranges of date values. A DateTimeParser is chosen based on the field. Either, but not both endpoints can be nil. startInclusive and endInclusive control inclusion of the endpoints.
func NewDateRangeQuery ¶
func NewDateRangeQuery(start, end *string) *dateRangeQuery
NewDateRangeQuery creates a new Query for ranges of date values. A DateTimeParser is chosen based on the field. Either, but not both endpoints can be nil.
func NewDisjunctionQuery ¶
func NewDisjunctionQuery(disjuncts []Query) *disjunctionQuery
NewDisjunctionQuery creates a new compound Query. Result documents satisfy at least one Query.
Example ¶
disjuncts := make([]Query, 2) disjuncts[0] = NewMatchQuery("great") disjuncts[1] = NewMatchQuery("named") query := NewDisjunctionQuery(disjuncts) searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(len(searchResults.Hits))
Output: 2
func NewDisjunctionQueryMin ¶
NewDisjunctionQueryMin creates a new compound Query. Result documents satisfy at least min Queries.
Example ¶
disjuncts := make([]Query, 2) disjuncts[0] = NewMatchQuery("great") disjuncts[1] = NewMatchQuery("named") query := NewDisjunctionQueryMin(disjuncts, float64(2)) searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(len(searchResults.Hits))
Output: 0
func NewFuzzyQuery ¶
func NewFuzzyQuery(term string) *fuzzyQuery
NewFuzzyQuery creates a new Query which finds documents containing terms within a specific fuzziness of the specified term. The default fuzziness is 2.
The current implementation uses Leveshtein edit distance as the fuzziness metric.
func NewIndexAlias ¶
func NewIndexAlias(indexes ...Index) *indexAliasImpl
NewIndexAlias creates a new IndexAlias over the provided Index objects.
func NewMatchAllQuery ¶
func NewMatchAllQuery() *matchAllQuery
NewMatchAllQuery creates a Query which will match all documents in the index.
Example ¶
// finds all documents in the index query := NewMatchAllQuery() searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(len(searchResults.Hits))
Output: 2
func NewMatchNoneQuery ¶
func NewMatchNoneQuery() *matchNoneQuery
NewMatchNoneQuery creates a Query which will not match any documents in the index.
Example ¶
// matches no documents in the index query := NewMatchNoneQuery() searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(len(searchResults.Hits))
Output: 0
func NewMatchPhraseQuery ¶
func NewMatchPhraseQuery(matchPhrase string) *matchPhraseQuery
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.
Example ¶
// finds all documents with the given phrase in the index query := NewMatchPhraseQuery("nameless one") searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 2
func NewMatchQuery ¶
func NewMatchQuery(match string) *matchQuery
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.
Example ¶
// finds documents with fields fully matching the given query text query := NewMatchQuery("named one") searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 1
func NewNumericRangeInclusiveQuery ¶
func NewNumericRangeInclusiveQuery(min, max *float64, minInclusive, maxInclusive *bool) *numericRangeQuery
NewNumericRangeInclusiveQuery creates a new Query for ranges of date values. Either, but not both endpoints can be nil. Control endpoint inclusion with inclusiveMin, inclusiveMax.
Example ¶
value1 := float64(10) value2 := float64(100) v1incl := false v2incl := false query := NewNumericRangeInclusiveQuery(&value1, &value2, &v1incl, &v2incl) searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 3
func NewNumericRangeQuery ¶
func NewNumericRangeQuery(min, max *float64) *numericRangeQuery
NewNumericRangeQuery creates a new Query for ranges of date values. Either, but not both endpoints can be nil. The minimum value is inclusive. The maximum value is exclusive.
Example ¶
value1 := float64(11) value2 := float64(100) data := struct{ Priority float64 }{Priority: float64(15)} data2 := struct{ Priority float64 }{Priority: float64(10)} err = example_index.Index("document id 3", data) if err != nil { panic(err) } err = example_index.Index("document id 4", data2) if err != nil { panic(err) } query := NewNumericRangeQuery(&value1, &value2) searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 3
func NewPhraseQuery ¶
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.
Example ¶
// finds all documents with the given phrases in the given field in the index query := NewPhraseQuery([]string{"nameless", "one"}, "Name") searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 2
func NewPrefixQuery ¶
func NewPrefixQuery(prefix string) *prefixQuery
NewPrefixQuery creates a new Query which finds documents containing terms that start with the specified prefix.
Example ¶
// finds all documents with terms having the given prefix in the index query := NewPrefixQuery("name") searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(len(searchResults.Hits))
Output: 2
func NewQueryStringQuery ¶
func NewQueryStringQuery(query string) *queryStringQuery
NewQueryStringQuery creates a new Query used for finding documents that satisfy a query string. The query string is a small query language for humans.
Example ¶
query := NewQueryStringQuery("+one -great") searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 1
func NewTermQuery ¶
func NewTermQuery(term string) *termQuery
NewTermQuery creates a new Query for finding an exact term match in the index.
Example ¶
query := NewTermQuery("great") searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 2
Types ¶
type Batch ¶
type Batch struct {
// contains filtered or unexported fields
}
A Batch groups together multiple Index and Delete operations you would like performed at the same time.
func (Batch) Delete ¶
Delete adds the specified delete operation to the batch. NOTE: the bleve Index is not updated until the batch is executed.
func (Batch) DeleteInternal ¶
SetInternal adds the specified delete internal operation to the batch. NOTE: the bleve Index is not updated until the batch is executed.
func (Batch) Index ¶
Index adds the specified index operation to the batch. NOTE: the bleve Index is not updated until the batch is executed.
func (Batch) SetInternal ¶
SetInternal adds the specified set internal operation to the batch. NOTE: the bleve Index is not updated until the batch is executed.
type Classifier ¶
type Classifier interface {
Type() string
}
A Classifier is an interface describing any object which knows how to identify its own type.
type DocumentMapping ¶
type DocumentMapping struct { Enabled bool `json:"enabled"` Dynamic bool `json:"dynamic"` Properties map[string]*DocumentMapping `json:"properties,omitempty"` Fields []*FieldMapping `json:"fields,omitempty"` DefaultAnalyzer string `json:"default_analyzer"` }
A DocumentMapping describes how a type of document should be indexed. As documents can be hierarchical, named sub-sections of documents are mapped using the same structure in the Properties field. Each value inside a document can be indexed 0 or more ways. These index entries are called fields and are stored in the Fields field. Entire sections of a document can be ignored or excluded by setting Enabled to false. If not explicitly mapped, default mapping operations are used. To disable this automatic handling, set Dynamic to false.
func NewDocumentDisabledMapping ¶
func NewDocumentDisabledMapping() *DocumentMapping
NewDocumentDisabledMapping returns a new document mapping that will not perform any indexing.
func NewDocumentMapping ¶
func NewDocumentMapping() *DocumentMapping
NewDocumentMapping returns a new document mapping with all the default values.
func NewDocumentStaticMapping ¶
func NewDocumentStaticMapping() *DocumentMapping
NewDocumentStaticMapping returns a new document mapping that will not automatically index parts of a document without an explicit mapping.
func (*DocumentMapping) AddFieldMapping ¶
func (dm *DocumentMapping) AddFieldMapping(fm *FieldMapping)
AddFieldMapping adds the provided FieldMapping for this section of the document.
Example ¶
// you can only add field mapping to those properties which already have a document mapping documentMapping := NewDocumentMapping() subDocumentMapping := NewDocumentMapping() documentMapping.AddSubDocumentMapping("Property", subDocumentMapping) fieldMapping := NewTextFieldMapping() fieldMapping.Analyzer = "en" subDocumentMapping.AddFieldMapping(fieldMapping) fmt.Println(len(documentMapping.Properties["Property"].Fields))
Output: 1
func (*DocumentMapping) AddFieldMappingsAt ¶
func (dm *DocumentMapping) AddFieldMappingsAt(property string, fms ...*FieldMapping)
AddFieldMappingsAt adds one or more FieldMappings at the named sub-document. If the named sub-document doesn't yet exist it is created for you. This is a convenience function to make most common mappings more concise. Otherwise, you would:
subMapping := NewDocumentMapping() subMapping.AddFieldMapping(fieldMapping) parentMapping.AddSubDocumentMapping(property, subMapping)
Example ¶
// you can only add field mapping to those properties which already have a document mapping documentMapping := NewDocumentMapping() subDocumentMapping := NewDocumentMapping() documentMapping.AddSubDocumentMapping("NestedProperty", subDocumentMapping) fieldMapping := NewTextFieldMapping() fieldMapping.Analyzer = "en" documentMapping.AddFieldMappingsAt("NestedProperty", fieldMapping) fmt.Println(len(documentMapping.Properties["NestedProperty"].Fields))
Output: 1
func (*DocumentMapping) AddSubDocumentMapping ¶
func (dm *DocumentMapping) AddSubDocumentMapping(property string, sdm *DocumentMapping)
AddSubDocumentMapping adds the provided DocumentMapping as a sub-mapping for the specified named subsection.
Example ¶
// adds a document mapping for a property in a document // useful for mapping nested documents documentMapping := NewDocumentMapping() subDocumentMapping := NewDocumentMapping() documentMapping.AddSubDocumentMapping("Property", subDocumentMapping) fmt.Println(len(documentMapping.Properties))
Output: 1
func (*DocumentMapping) UnmarshalJSON ¶
func (dm *DocumentMapping) UnmarshalJSON(data []byte) error
UnmarshalJSON deserializes a JSON representation of the DocumentMapping.
type Error ¶
type Error int
Error represents a more strongly typed bleve error for detecting and handling specific types of errors.
const ( ErrorIndexPathExists Error = iota ErrorIndexPathDoesNotExist ErrorIndexMetaMissing ErrorIndexMetaCorrupt ErrorDisjunctionFewerThanMinClauses ErrorBooleanQueryNeedsMustOrShould ErrorNumericQueryNoBounds ErrorPhraseQueryNoTerms ErrorUnknownQueryType ErrorUnknownStorageType ErrorIndexClosed ErrorAliasMulti ErrorAliasEmpty )
Constant Error values which can be compared to determine the type of error
type FacetRequest ¶
type FacetRequest struct { Size int `json:"size"` Field string `json:"field"` NumericRanges []*numericRange `json:"numeric_ranges,omitempty"` DateTimeRanges []*dateTimeRange `json:"date_ranges,omitempty"` }
A FacetRequest describes a facet or aggregation of the result document set you would like to be built.
func NewFacetRequest ¶
func NewFacetRequest(field string, size int) *FacetRequest
NewFacetRequest creates a facet on the specified field that limits the number of entries to the specified size.
Example ¶
facet := NewFacetRequest("Name", 1) query := NewMatchAllQuery() searchRequest := NewSearchRequest(query) searchRequest.AddFacet("facet name", facet) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } // total number of terms fmt.Println(searchResults.Facets["facet name"].Total) // numer of docs with no value for this field fmt.Println(searchResults.Facets["facet name"].Missing) // term with highest occurences in field name fmt.Println(searchResults.Facets["facet name"].Terms[0].Term)
Output: 5 2 one
func (*FacetRequest) AddDateTimeRange ¶
func (fr *FacetRequest) AddDateTimeRange(name string, start, end time.Time)
AddDateTimeRange adds a bucket to a field containing date values. Documents with a date value falling into this range are tabulated as part of this bucket/range.
Example ¶
facet := NewFacetRequest("Created", 1) facet.AddDateTimeRange("range name", time.Unix(0, 0), time.Now()) query := NewMatchAllQuery() searchRequest := NewSearchRequest(query) searchRequest.AddFacet("facet name", facet) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } // dates in field Created since starting of unix time till now fmt.Println(searchResults.Facets["facet name"].DateRanges[0].Count)
Output: 2
func (*FacetRequest) AddNumericRange ¶
func (fr *FacetRequest) AddNumericRange(name string, min, max *float64)
AddNumericRange adds a bucket to a field containing numeric values. Documents with a numeric value falling into this range are tabulated as part of this bucket/range.
Example ¶
value1 := float64(11) facet := NewFacetRequest("Priority", 1) facet.AddNumericRange("range name", &value1, nil) query := NewMatchAllQuery() searchRequest := NewSearchRequest(query) searchRequest.AddFacet("facet name", facet) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } // number documents with field Priority in the given range fmt.Println(searchResults.Facets["facet name"].NumericRanges[0].Count)
Output: 1
type FacetsRequest ¶
type FacetsRequest map[string]*FacetRequest
FacetsRequest groups together all the FacetRequest objects for a single query.
type FieldMapping ¶
type FieldMapping struct { Name string `json:"name,omitempty"` Type string `json:"type,omitempty"` Analyzer string `json:"analyzer,omitempty"` Store bool `json:"store,omitempty"` Index bool `json:"index,omitempty"` IncludeTermVectors bool `json:"include_term_vectors,omitempty"` IncludeInAll bool `json:"include_in_all,omitempty"` DateFormat string `json:"date_format,omitempty"` }
A FieldMapping describes how a specific item should be put into the index.
func NewDateTimeFieldMapping ¶
func NewDateTimeFieldMapping() *FieldMapping
NewDateTimeFieldMapping returns a default field mapping for dates
func NewNumericFieldMapping ¶
func NewNumericFieldMapping() *FieldMapping
NewNumericFieldMapping returns a default field mapping for numbers
func NewTextFieldMapping ¶
func NewTextFieldMapping() *FieldMapping
NewTextFieldMapping returns a default field mapping for text
func (*FieldMapping) Options ¶
func (fm *FieldMapping) Options() document.IndexingOptions
Options returns the indexing options for this field.
type HighlightRequest ¶
HighlightRequest describes how field matches should be highlighted.
func NewHighlight ¶
func NewHighlight() *HighlightRequest
NewHighlight creates a default HighlightRequest.
Example ¶
query := NewMatchQuery("nameless") searchRequest := NewSearchRequest(query) searchRequest.Highlight = NewHighlight() searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].Fragments["Name"][0])
Output: great <span class="highlight">nameless</span> one
func NewHighlightWithStyle ¶
func NewHighlightWithStyle(style string) *HighlightRequest
NewHighlightWithStyle creates a HighlightRequest with an alternate style.
Example ¶
query := NewMatchQuery("nameless") searchRequest := NewSearchRequest(query) searchRequest.Highlight = NewHighlightWithStyle("ansi") searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].Fragments["Name"][0])
Output: great �[43mnameless�[0m one
func (*HighlightRequest) AddField ¶
func (h *HighlightRequest) AddField(field string)
type Index ¶
type Index interface { Index(id string, data interface{}) error Delete(id string) error Batch(b *Batch) error Document(id string) (*document.Document, error) DocCount() (uint64, error) Search(req *SearchRequest) (*SearchResult, error) Fields() ([]string, error) DumpAll() chan interface{} DumpDoc(id string) chan interface{} DumpFields() chan interface{} Close() error Mapping() *IndexMapping Stats() *IndexStat GetInternal(key []byte) ([]byte, error) SetInternal(key, val []byte) error DeleteInternal(key []byte) error Advanced() (index.Index, store.KVStore, error) }
An Index implements all the indexing and searching capabilities of bleve. An Index can be created using the New() and Open() methods.
Example (Indexing) ¶
data := struct { Name string Created time.Time }{Name: "named one", Created: time.Now()} data2 := struct { Name string Created time.Time }{Name: "great nameless one", Created: time.Now()} // index some data err = example_index.Index("document id 1", data) if err != nil { panic(err) } err = example_index.Index("document id 2", data2) if err != nil { panic(err) } // 2 documents have been indexed count, err := example_index.DocCount() if err != nil { panic(err) } fmt.Println(count)
Output: 2
func New ¶
func New(path string, mapping *IndexMapping) (Index, error)
New index at the specified path, must not exist. The provided mapping will be used for all Index/Search operations.
Example ¶
mapping = NewIndexMapping() example_index, err = New("path_to_index", mapping) if err != nil { panic(err) } count, err := example_index.DocCount() if err != nil { panic(err) } fmt.Println(count)
Output: 0
func NewUsing ¶
func NewUsing(path string, mapping *IndexMapping, kvstore string, kvconfig map[string]interface{}) (Index, error)
NewUsing creates index at the specified path, which must not already exist. The provided mapping will be used for all Index/Search operations. The specified kvstore implemenation will be used and the provided kvconfig will be passed to its constructor.
func Open ¶
Open index at the specified path, must exist. The mapping used when it was created will be used for all Index/Search operations.
type IndexAlias ¶
An IndexAlias is a wrapper around one or more Index objects. It has two distinct modes of operation. 1. When it points to a single index, ALL index operations are valid and will be passed through to the underlying index. 2. When it points to more than one index, the only valid operation is Search. In this case the search will be performed across all the underlying indexes and the results merged. Calls to Add/Remove/Swap the underlying indexes are atomic, so you can safely change the underlying Index objects while other components are performing operations.
type IndexMapping ¶
type IndexMapping struct { TypeMapping map[string]*DocumentMapping `json:"types,omitempty"` DefaultMapping *DocumentMapping `json:"default_mapping"` TypeField string `json:"type_field"` DefaultType string `json:"default_type"` DefaultAnalyzer string `json:"default_analyzer"` DefaultDateTimeParser string `json:"default_datetime_parser"` DefaultField string `json:"default_field"` ByteArrayConverter string `json:"byte_array_converter"` CustomAnalysis *customAnalysis `json:"analysis,omitempty"` // contains filtered or unexported fields }
An IndexMapping controls how objects are placed into an index. First the type of the object is determined. Once the type is know, the appropriate DocumentMapping is selected by the type. If no mapping was determined for that type, a DefaultMapping will be used.
func NewIndexMapping ¶
func NewIndexMapping() *IndexMapping
NewIndexMapping creates a new IndexMapping that will use all the default indexing rules
func (*IndexMapping) AddCustomAnalyzer ¶
func (im *IndexMapping) AddCustomAnalyzer(name string, config map[string]interface{}) error
AddCustomAnalyzer defines a custom analyzer for use in this mapping
func (*IndexMapping) AddCustomCharFilter ¶
func (im *IndexMapping) AddCustomCharFilter(name string, config map[string]interface{}) error
AddCustomCharFilter defines a custom char filter for use in this mapping
func (*IndexMapping) AddCustomDateTimeParser ¶
func (im *IndexMapping) AddCustomDateTimeParser(name string, config map[string]interface{}) error
AddCustomDateTimeParser defines a custom date time parser for use in this mapping
func (*IndexMapping) AddCustomTokenFilter ¶
func (im *IndexMapping) AddCustomTokenFilter(name string, config map[string]interface{}) error
AddCustomTokenFilter defines a custom token filter for use in this mapping
func (*IndexMapping) AddCustomTokenMap ¶
func (im *IndexMapping) AddCustomTokenMap(name string, config map[string]interface{}) error
AddCustomTokenMap defines a custom token map for use in this mapping
func (*IndexMapping) AddCustomTokenizer ¶
func (im *IndexMapping) AddCustomTokenizer(name string, config map[string]interface{}) error
AddCustomTokenizer defines a custom tokenizer for use in this mapping
func (*IndexMapping) AddDocumentMapping ¶
func (im *IndexMapping) AddDocumentMapping(doctype string, dm *DocumentMapping)
AddDocumentMapping sets a custom document mapping for the specified type
func (*IndexMapping) AnalyzeText ¶
func (im *IndexMapping) AnalyzeText(analyzerName string, text []byte) (analysis.TokenStream, error)
func (*IndexMapping) UnmarshalJSON ¶
func (im *IndexMapping) UnmarshalJSON(data []byte) error
UnmarshalJSON deserializes a JSON representation of the IndexMapping
type IndexStat ¶
type IndexStat struct {
// contains filtered or unexported fields
}
func (*IndexStat) MarshalJSON ¶
type IndexStats ¶
func (IndexStats) String ¶
func (i IndexStats) String() string
type Query ¶
type Query interface { Boost() float64 SetBoost(b float64) Query Field() string SetField(f string) Query Searcher(i index.IndexReader, m *IndexMapping, explain bool) (search.Searcher, error) Validate() error }
A Query represents a description of the type and parameters for a query into the index.
func ParseQuery ¶
ParseQuery deserializes a JSON representation of a Query object.
type SearchRequest ¶
type SearchRequest struct { Query Query `json:"query"` Size int `json:"size"` From int `json:"from"` Highlight *HighlightRequest `json:"highlight"` Fields []string `json:"fields"` Facets FacetsRequest `json:"facets"` Explain bool `json:"explain"` }
A SearchRequest describes all the parameters needed to search the index. Query is required. Size/From describe how much and which part of the result set to return. Highlight describes optional search result highlighting. Fields describes a list of field values which should be retrieved for result documents. Facets describe the set of facets to be computed. Explain triggers inclusion of additional search result score explanations.
A special field named "*" can be used to return all fields.
func NewSearchRequest ¶
func NewSearchRequest(q Query) *SearchRequest
NewSearchRequest creates a new SearchRequest for the Query, using default values for all other search parameters.
Example ¶
// finds documents with fields fully matching the given query text query := NewMatchQuery("named one") searchRequest := NewSearchRequest(query) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } fmt.Println(searchResults.Hits[0].ID)
Output: document id 1
func NewSearchRequestOptions ¶
func NewSearchRequestOptions(q Query, size, from int, explain bool) *SearchRequest
NewSearchRequestOptions creates a new SearchRequest for the Query, with the requested size, from and explanation search parameters.
func (*SearchRequest) AddFacet ¶
func (r *SearchRequest) AddFacet(facetName string, f *FacetRequest)
AddFacet adds a FacetRequest to this SearchRequest
Example ¶
facet := NewFacetRequest("Name", 1) query := NewMatchAllQuery() searchRequest := NewSearchRequest(query) searchRequest.AddFacet("facet name", facet) searchResults, err := example_index.Search(searchRequest) if err != nil { panic(err) } // total number of terms fmt.Println(searchResults.Facets["facet name"].Total) // numer of docs with no value for this field fmt.Println(searchResults.Facets["facet name"].Missing) // term with highest occurences in field name fmt.Println(searchResults.Facets["facet name"].Terms[0].Term)
Output: 5 2 one
func (*SearchRequest) UnmarshalJSON ¶
func (r *SearchRequest) UnmarshalJSON(input []byte) error
UnmarshalJSON deserializes a JSON representation of a SearchRequest
type SearchResult ¶
type SearchResult struct { Request *SearchRequest `json:"request"` Hits search.DocumentMatchCollection `json:"hits"` Total uint64 `json:"total_hits"` MaxScore float64 `json:"max_score"` Took time.Duration `json:"took"` Facets search.FacetResults `json:"facets"` }
A SearchResult describes the results of executing a SearchRequest.
func MultiSearch ¶
func MultiSearch(req *SearchRequest, indexes ...Index) (*SearchResult, error)
MultiSearch executes a SearchRequest across multiple Index objects, then merges the results.
func (*SearchResult) Merge ¶
func (sr *SearchResult) Merge(other *SearchResult)
func (*SearchResult) String ¶
func (sr *SearchResult) String() string
Source Files
¶
- config.go
- config_cznicb.go
- doc.go
- error.go
- index.go
- index_alias.go
- index_alias_impl.go
- index_impl.go
- index_meta.go
- index_stats.go
- mapping_document.go
- mapping_field.go
- mapping_index.go
- query.go
- query_boolean.go
- query_conjunction.go
- query_date_range.go
- query_disjunction.go
- query_fuzzy.go
- query_match.go
- query_match_all.go
- query_match_none.go
- query_match_phrase.go
- query_numeric_range.go
- query_phrase.go
- query_prefix.go
- query_string.go
- query_string.nn.go
- query_string.y.go
- query_string_parser.go
- query_term.go
- reflect.go
- search.go
Directories
¶
Path | Synopsis |
---|---|
store/cznicb
Package cznicb provides an in-memory implementation of the KVStore interfaces using the cznic/b in-memory btree.
|
Package cznicb provides an in-memory implementation of the KVStore interfaces using the cznic/b in-memory btree. |
store/gtreap
Package gtreap provides an in-memory implementation of the KVStore interfaces using the gtreap balanced-binary treap, copy-on-write data structure.
|
Package gtreap provides an in-memory implementation of the KVStore interfaces using the gtreap balanced-binary treap, copy-on-write data structure. |
upside_down
Package upside_down is a generated protocol buffer package.
|
Package upside_down is a generated protocol buffer package. |
utils
|
|