Documentation ¶
Index ¶
- Variables
- func LevenshteinDistance(a, b string) int
- func LevenshteinDistanceMax(a, b string, max int) (int, bool)
- type ArrayPositions
- type Collector
- type DateRangeFacet
- type DateRangeFacets
- type DocumentMatch
- type DocumentMatchCollection
- type DocumentMatchPool
- type DocumentMatchPoolTooSmall
- type Explanation
- type FacetBuilder
- type FacetResult
- type FacetResults
- type FacetsBuilder
- func (fb *FacetsBuilder) Add(name string, facetBuilder FacetBuilder)
- func (fb *FacetsBuilder) EndDoc()
- func (fb *FacetsBuilder) RequiredFields() []string
- func (fb *FacetsBuilder) Results() FacetResults
- func (fb *FacetsBuilder) StartDoc()
- func (fb *FacetsBuilder) UpdateVisitor(field string, term []byte)
- type FieldFragmentMap
- type FieldTermLocationMap
- type Location
- type Locations
- type NumericRangeFacet
- type NumericRangeFacets
- type SearchContext
- type SearchSort
- type Searcher
- type SearcherOptions
- type SortDocID
- func (s *SortDocID) Copy() SearchSort
- func (s *SortDocID) Descending() bool
- func (s *SortDocID) MarshalJSON() ([]byte, error)
- func (s *SortDocID) RequiresDocID() bool
- func (s *SortDocID) RequiresFields() []string
- func (s *SortDocID) RequiresScoring() bool
- func (s *SortDocID) UpdateVisitor(field string, term []byte)
- func (s *SortDocID) Value(i *DocumentMatch) string
- type SortField
- func (s *SortField) Copy() SearchSort
- func (s *SortField) Descending() bool
- func (s *SortField) MarshalJSON() ([]byte, error)
- func (s *SortField) RequiresDocID() bool
- func (s *SortField) RequiresFields() []string
- func (s *SortField) RequiresScoring() bool
- func (s *SortField) UpdateVisitor(field string, term []byte)
- func (s *SortField) Value(i *DocumentMatch) string
- type SortFieldMissing
- type SortFieldMode
- type SortFieldType
- type SortGeoDistance
- func (s *SortGeoDistance) Copy() SearchSort
- func (s *SortGeoDistance) Descending() bool
- func (s *SortGeoDistance) MarshalJSON() ([]byte, error)
- func (s *SortGeoDistance) RequiresDocID() bool
- func (s *SortGeoDistance) RequiresFields() []string
- func (s *SortGeoDistance) RequiresScoring() bool
- func (s *SortGeoDistance) UpdateVisitor(field string, term []byte)
- func (s *SortGeoDistance) Value(i *DocumentMatch) string
- type SortOrder
- func (so SortOrder) CacheDescending() []bool
- func (so SortOrder) CacheIsScore() []bool
- func (so SortOrder) Compare(cachedScoring, cachedDesc []bool, i, j *DocumentMatch) int
- func (so SortOrder) Copy() SortOrder
- func (so SortOrder) RequiredFields() []string
- func (so SortOrder) RequiresDocID() bool
- func (so SortOrder) RequiresScore() bool
- func (so SortOrder) UpdateVisitor(field string, term []byte)
- func (so SortOrder) Value(doc *DocumentMatch)
- type SortScore
- func (s *SortScore) Copy() SearchSort
- func (s *SortScore) Descending() bool
- func (s *SortScore) MarshalJSON() ([]byte, error)
- func (s *SortScore) RequiresDocID() bool
- func (s *SortScore) RequiresFields() []string
- func (s *SortScore) RequiresScoring() bool
- func (s *SortScore) UpdateVisitor(field string, term []byte)
- func (s *SortScore) Value(i *DocumentMatch) string
- type TermFacet
- type TermFacets
- type TermLocationMap
Constants ¶
This section is empty.
Variables ¶
var HighTerm = strings.Repeat(string([]byte{0xff}), 10)
var LowTerm = string([]byte{0x00})
Functions ¶
func LevenshteinDistance ¶
func LevenshteinDistanceMax ¶
LevenshteinDistanceMax same as LevenshteinDistance but attempts to bail early once we know the distance will be greater than max in which case the first return val will be the max and the second will be true, indicating max was exceeded
Types ¶
type ArrayPositions ¶ added in v0.6.0
type ArrayPositions []uint64
func (ArrayPositions) Equals ¶ added in v0.6.0
func (ap ArrayPositions) Equals(other ArrayPositions) bool
type Collector ¶
type Collector interface { Collect(ctx context.Context, searcher Searcher, reader index.IndexReader) error Results() DocumentMatchCollection Total() uint64 MaxScore() float64 Took() time.Duration SetFacetsBuilder(facetsBuilder *FacetsBuilder) FacetResults() FacetResults }
type DateRangeFacet ¶
type DateRangeFacet struct { Name string `json:"name"` Start *string `json:"start,omitempty"` End *string `json:"end,omitempty"` Count int `json:"count"` }
func (*DateRangeFacet) Same ¶
func (drf *DateRangeFacet) Same(other *DateRangeFacet) bool
type DateRangeFacets ¶
type DateRangeFacets []*DateRangeFacet
func (DateRangeFacets) Add ¶
func (drf DateRangeFacets) Add(dateRangeFacet *DateRangeFacet) DateRangeFacets
func (DateRangeFacets) Len ¶
func (drf DateRangeFacets) Len() int
func (DateRangeFacets) Less ¶
func (drf DateRangeFacets) Less(i, j int) bool
func (DateRangeFacets) Swap ¶
func (drf DateRangeFacets) Swap(i, j int)
type DocumentMatch ¶
type DocumentMatch struct { Index string `json:"index,omitempty"` ID string `json:"id"` IndexInternalID index.IndexInternalID `json:"-"` Score float64 `json:"score"` Expl *Explanation `json:"explanation,omitempty"` Locations FieldTermLocationMap `json:"locations,omitempty"` Fragments FieldFragmentMap `json:"fragments,omitempty"` Sort []string `json:"sort,omitempty"` // Fields contains the values for document fields listed in // SearchRequest.Fields. Text fields are returned as strings, numeric // fields as float64s and date fields as time.RFC3339 formatted strings. Fields map[string]interface{} `json:"fields,omitempty"` // if we load the document for this hit, remember it so we dont load again Document *document.Document `json:"-"` // used to maintain natural index order HitNumber uint64 `json:"-"` }
func (*DocumentMatch) AddFieldValue ¶
func (dm *DocumentMatch) AddFieldValue(name string, value interface{})
func (*DocumentMatch) Reset ¶ added in v0.4.0
func (dm *DocumentMatch) Reset() *DocumentMatch
Reset allows an already allocated DocumentMatch to be reused
func (*DocumentMatch) String ¶ added in v0.4.0
func (dm *DocumentMatch) String() string
type DocumentMatchCollection ¶
type DocumentMatchCollection []*DocumentMatch
func (DocumentMatchCollection) Len ¶
func (c DocumentMatchCollection) Len() int
func (DocumentMatchCollection) Less ¶
func (c DocumentMatchCollection) Less(i, j int) bool
func (DocumentMatchCollection) Swap ¶
func (c DocumentMatchCollection) Swap(i, j int)
type DocumentMatchPool ¶ added in v0.4.0
type DocumentMatchPool struct { TooSmall DocumentMatchPoolTooSmall // contains filtered or unexported fields }
DocumentMatchPool manages use/re-use of DocumentMatch instances it pre-allocates space from a single large block with the expected number of instances. It is not thread-safe as currently all aspects of search take place in a single goroutine.
func NewDocumentMatchPool ¶ added in v0.4.0
func NewDocumentMatchPool(size, sortsize int) *DocumentMatchPool
NewDocumentMatchPool will build a DocumentMatchPool with memory pre-allocated to accommodate the requested number of DocumentMatch instances
func (*DocumentMatchPool) Get ¶ added in v0.4.0
func (p *DocumentMatchPool) Get() *DocumentMatch
Get returns an available DocumentMatch from the pool if the pool was not allocated with sufficient size, an allocation will occur to satisfy this request. As a side-effect this will grow the size of the pool.
func (*DocumentMatchPool) Put ¶ added in v0.4.0
func (p *DocumentMatchPool) Put(d *DocumentMatch)
Put returns a DocumentMatch to the pool
type DocumentMatchPoolTooSmall ¶ added in v0.4.0
type DocumentMatchPoolTooSmall func(p *DocumentMatchPool) *DocumentMatch
DocumentMatchPoolTooSmall is a callback function that can be executed when the DocumentMatchPool does not have sufficient capacity By default we just perform just-in-time allocation, but you could log a message, or panic, etc.
type Explanation ¶
type Explanation struct { Value float64 `json:"value"` Message string `json:"message"` Children []*Explanation `json:"children,omitempty"` }
func (*Explanation) String ¶
func (expl *Explanation) String() string
type FacetBuilder ¶
type FacetBuilder interface { StartDoc() UpdateVisitor(field string, term []byte) EndDoc() Result() *FacetResult Field() string }
type FacetResult ¶
type FacetResult struct { Field string `json:"field"` Total int `json:"total"` Missing int `json:"missing"` Other int `json:"other"` Terms TermFacets `json:"terms,omitempty"` NumericRanges NumericRangeFacets `json:"numeric_ranges,omitempty"` DateRanges DateRangeFacets `json:"date_ranges,omitempty"` }
func (*FacetResult) Fixup ¶
func (fr *FacetResult) Fixup(size int)
func (*FacetResult) Merge ¶
func (fr *FacetResult) Merge(other *FacetResult)
type FacetResults ¶
type FacetResults map[string]*FacetResult
func (FacetResults) Fixup ¶
func (fr FacetResults) Fixup(name string, size int)
func (FacetResults) Merge ¶
func (fr FacetResults) Merge(other FacetResults)
type FacetsBuilder ¶
type FacetsBuilder struct {
// contains filtered or unexported fields
}
func NewFacetsBuilder ¶
func NewFacetsBuilder(indexReader index.IndexReader) *FacetsBuilder
func (*FacetsBuilder) Add ¶
func (fb *FacetsBuilder) Add(name string, facetBuilder FacetBuilder)
func (*FacetsBuilder) EndDoc ¶ added in v0.6.0
func (fb *FacetsBuilder) EndDoc()
func (*FacetsBuilder) RequiredFields ¶ added in v0.6.0
func (fb *FacetsBuilder) RequiredFields() []string
func (*FacetsBuilder) Results ¶
func (fb *FacetsBuilder) Results() FacetResults
func (*FacetsBuilder) StartDoc ¶ added in v0.6.0
func (fb *FacetsBuilder) StartDoc()
func (*FacetsBuilder) UpdateVisitor ¶ added in v0.6.0
func (fb *FacetsBuilder) UpdateVisitor(field string, term []byte)
type FieldFragmentMap ¶
type FieldTermLocationMap ¶
type FieldTermLocationMap map[string]TermLocationMap
func MergeLocations ¶
func MergeLocations(locations []FieldTermLocationMap) FieldTermLocationMap
type Location ¶
type Location struct { // Pos is the position of the term within the field, starting at 1 Pos uint64 `json:"pos"` // Start and End are the byte offsets of the term in the field Start uint64 `json:"start"` End uint64 `json:"end"` // ArrayPositions contains the positions of the term within any elements. ArrayPositions ArrayPositions `json:"array_positions"` }
type NumericRangeFacet ¶
type NumericRangeFacet struct { Name string `json:"name"` Min *float64 `json:"min,omitempty"` Max *float64 `json:"max,omitempty"` Count int `json:"count"` }
func (*NumericRangeFacet) Same ¶ added in v0.6.0
func (nrf *NumericRangeFacet) Same(other *NumericRangeFacet) bool
type NumericRangeFacets ¶
type NumericRangeFacets []*NumericRangeFacet
func (NumericRangeFacets) Add ¶
func (nrf NumericRangeFacets) Add(numericRangeFacet *NumericRangeFacet) NumericRangeFacets
func (NumericRangeFacets) Len ¶
func (nrf NumericRangeFacets) Len() int
func (NumericRangeFacets) Less ¶
func (nrf NumericRangeFacets) Less(i, j int) bool
func (NumericRangeFacets) Swap ¶
func (nrf NumericRangeFacets) Swap(i, j int)
type SearchContext ¶ added in v0.4.0
type SearchContext struct {
DocumentMatchPool *DocumentMatchPool
}
SearchContext represents the context around a single search
type SearchSort ¶ added in v0.4.0
type SearchSort interface { UpdateVisitor(field string, term []byte) Value(a *DocumentMatch) string Descending() bool RequiresDocID() bool RequiresScoring() bool RequiresFields() []string Copy() SearchSort }
func ParseSearchSortJSON ¶ added in v0.4.0
func ParseSearchSortJSON(input json.RawMessage) (SearchSort, error)
func ParseSearchSortObj ¶ added in v0.4.0
func ParseSearchSortObj(input map[string]interface{}) (SearchSort, error)
func ParseSearchSortString ¶ added in v0.4.0
func ParseSearchSortString(input string) SearchSort
type Searcher ¶
type Searcher interface { Next(ctx *SearchContext) (*DocumentMatch, error) Advance(ctx *SearchContext, ID index.IndexInternalID) (*DocumentMatch, error) Close() error Weight() float64 SetQueryNorm(float64) Count() uint64 Min() int DocumentMatchPoolSize() int }
type SearcherOptions ¶ added in v0.6.0
type SortDocID ¶ added in v0.4.0
type SortDocID struct {
Desc bool
}
SortDocID will sort results by the document identifier
func (*SortDocID) Copy ¶ added in v0.6.0
func (s *SortDocID) Copy() SearchSort
func (*SortDocID) Descending ¶ added in v0.4.0
Descending determines the order of the sort
func (*SortDocID) MarshalJSON ¶ added in v0.4.0
func (*SortDocID) RequiresDocID ¶ added in v0.4.0
RequiresDocID says this SearchSort does require the DocID be loaded
func (*SortDocID) RequiresFields ¶ added in v0.4.0
RequiresFields says this SearchStore does not require any stored fields
func (*SortDocID) RequiresScoring ¶ added in v0.4.0
RequiresScoring says this SearchStore does not require scoring
func (*SortDocID) UpdateVisitor ¶ added in v0.6.0
UpdateVisitor is a no-op for SortDocID as it's value is not dependent on any field terms
func (*SortDocID) Value ¶ added in v0.4.0
func (s *SortDocID) Value(i *DocumentMatch) string
Value returns the sort value of the DocumentMatch
type SortField ¶ added in v0.4.0
type SortField struct { Field string Desc bool Type SortFieldType Mode SortFieldMode Missing SortFieldMissing // contains filtered or unexported fields }
SortField will sort results by the value of a stored field
Field is the name of the field Descending reverse the sort order (default false) Type allows forcing of string/number/date behavior (default auto) Mode controls behavior for multi-values fields (default first) Missing controls behavior of missing values (default last)
func (*SortField) Copy ¶ added in v0.6.0
func (s *SortField) Copy() SearchSort
func (*SortField) Descending ¶ added in v0.4.0
Descending determines the order of the sort
func (*SortField) MarshalJSON ¶ added in v0.4.0
func (*SortField) RequiresDocID ¶ added in v0.4.0
RequiresDocID says this SearchSort does not require the DocID be loaded
func (*SortField) RequiresFields ¶ added in v0.4.0
RequiresFields says this SearchStore requires the specified stored field
func (*SortField) RequiresScoring ¶ added in v0.4.0
RequiresScoring says this SearchStore does not require scoring
func (*SortField) UpdateVisitor ¶ added in v0.6.0
UpdateVisitor notifies this sort field that in this document this field has the specified term
func (*SortField) Value ¶ added in v0.4.0
func (s *SortField) Value(i *DocumentMatch) string
Value returns the sort value of the DocumentMatch it also resets the state of this SortField for processing the next document
type SortFieldMissing ¶ added in v0.4.0
type SortFieldMissing int
SortFieldMissing controls where documents missing a field value should be sorted
const ( // SortFieldMissingLast sorts documents missing a field at the end SortFieldMissingLast SortFieldMissing = iota // SortFieldMissingFirst sorts documents missing a field at the beginning SortFieldMissingFirst )
type SortFieldMode ¶ added in v0.4.0
type SortFieldMode int
SortFieldMode describes the behavior if the field has multiple values
const ( // SortFieldDefault uses the first (or only) value, this is the default zero-value SortFieldDefault SortFieldMode = iota // FIXME name is confusing // SortFieldMin uses the minimum value SortFieldMin // SortFieldMax uses the maximum value SortFieldMax )
type SortFieldType ¶ added in v0.4.0
type SortFieldType int
SortFieldType lets you control some internal sort behavior normally leaving this to the zero-value of SortFieldAuto is fine
const ( // SortFieldAuto applies heuristics attempt to automatically sort correctly SortFieldAuto SortFieldType = iota // SortFieldAsString forces sort as string (no prefix coded terms removed) SortFieldAsString // SortFieldAsNumber forces sort as string (prefix coded terms with shift > 0 removed) SortFieldAsNumber // SortFieldAsDate forces sort as string (prefix coded terms with shift > 0 removed) SortFieldAsDate )
type SortGeoDistance ¶ added in v0.6.0
type SortGeoDistance struct { Field string Desc bool Unit string Lon float64 Lat float64 // contains filtered or unexported fields }
SortGeoDistance will sort results by the distance of an indexed geo point, from the provided location.
Field is the name of the field Descending reverse the sort order (default false)
func NewSortGeoDistance ¶ added in v0.6.0
func NewSortGeoDistance(field, unit string, lon, lat float64, desc bool) ( *SortGeoDistance, error)
NewSortGeoDistance creates SearchSort instance for sorting documents by their distance from the specified point.
func (*SortGeoDistance) Copy ¶ added in v0.6.0
func (s *SortGeoDistance) Copy() SearchSort
func (*SortGeoDistance) Descending ¶ added in v0.6.0
func (s *SortGeoDistance) Descending() bool
Descending determines the order of the sort
func (*SortGeoDistance) MarshalJSON ¶ added in v0.6.0
func (s *SortGeoDistance) MarshalJSON() ([]byte, error)
func (*SortGeoDistance) RequiresDocID ¶ added in v0.6.0
func (s *SortGeoDistance) RequiresDocID() bool
RequiresDocID says this SearchSort does not require the DocID be loaded
func (*SortGeoDistance) RequiresFields ¶ added in v0.6.0
func (s *SortGeoDistance) RequiresFields() []string
RequiresFields says this SearchStore requires the specified stored field
func (*SortGeoDistance) RequiresScoring ¶ added in v0.6.0
func (s *SortGeoDistance) RequiresScoring() bool
RequiresScoring says this SearchStore does not require scoring
func (*SortGeoDistance) UpdateVisitor ¶ added in v0.6.0
func (s *SortGeoDistance) UpdateVisitor(field string, term []byte)
UpdateVisitor notifies this sort field that in this document this field has the specified term
func (*SortGeoDistance) Value ¶ added in v0.6.0
func (s *SortGeoDistance) Value(i *DocumentMatch) string
Value returns the sort value of the DocumentMatch it also resets the state of this SortField for processing the next document
type SortOrder ¶ added in v0.4.0
type SortOrder []SearchSort
func ParseSortOrderJSON ¶ added in v0.4.0
func ParseSortOrderJSON(in []json.RawMessage) (SortOrder, error)
func ParseSortOrderStrings ¶ added in v0.4.0
func (SortOrder) CacheDescending ¶ added in v0.4.0
func (SortOrder) CacheIsScore ¶ added in v0.4.0
func (SortOrder) Compare ¶ added in v0.4.0
func (so SortOrder) Compare(cachedScoring, cachedDesc []bool, i, j *DocumentMatch) int
Compare will compare two document matches using the specified sort order if both are numbers, we avoid converting back to term
func (SortOrder) RequiredFields ¶ added in v0.4.0
func (SortOrder) RequiresDocID ¶ added in v0.4.0
func (SortOrder) RequiresScore ¶ added in v0.4.0
func (SortOrder) UpdateVisitor ¶ added in v0.6.0
func (SortOrder) Value ¶ added in v0.4.0
func (so SortOrder) Value(doc *DocumentMatch)
type SortScore ¶ added in v0.4.0
type SortScore struct {
Desc bool
}
SortScore will sort results by the document match score
func (*SortScore) Copy ¶ added in v0.6.0
func (s *SortScore) Copy() SearchSort
func (*SortScore) Descending ¶ added in v0.4.0
Descending determines the order of the sort
func (*SortScore) MarshalJSON ¶ added in v0.4.0
func (*SortScore) RequiresDocID ¶ added in v0.4.0
RequiresDocID says this SearchSort does not require the DocID be loaded
func (*SortScore) RequiresFields ¶ added in v0.4.0
RequiresFields says this SearchStore does not require any store fields
func (*SortScore) RequiresScoring ¶ added in v0.4.0
RequiresScoring says this SearchStore does require scoring
func (*SortScore) UpdateVisitor ¶ added in v0.6.0
UpdateVisitor is a no-op for SortScore as it's value is not dependent on any field terms
func (*SortScore) Value ¶ added in v0.4.0
func (s *SortScore) Value(i *DocumentMatch) string
Value returns the sort value of the DocumentMatch
type TermFacets ¶
type TermFacets []*TermFacet
func (TermFacets) Add ¶
func (tf TermFacets) Add(termFacet *TermFacet) TermFacets
func (TermFacets) Len ¶
func (tf TermFacets) Len() int
func (TermFacets) Less ¶
func (tf TermFacets) Less(i, j int) bool
func (TermFacets) Swap ¶
func (tf TermFacets) Swap(i, j int)
type TermLocationMap ¶
func MergeTermLocationMaps ¶
func MergeTermLocationMaps(rv, other TermLocationMap) TermLocationMap
func (TermLocationMap) AddLocation ¶
func (t TermLocationMap) AddLocation(term string, location *Location)