in pkg/index/inverted/inverted.go [148:201]
func (s *store) Iterator(fieldKey index.FieldKey, termRange index.RangeOpts, order modelv1.Sort) (iter index.FieldIterator, err error) {
if termRange.Lower != nil &&
termRange.Upper != nil &&
bytes.Compare(termRange.Lower, termRange.Upper) > 0 {
return index.DummyFieldIterator, nil
}
if termRange.Upper == nil {
termRange.Upper = defaultUpper
}
if termRange.Lower == nil {
termRange.Lower = defaultLower
}
reader, err := s.writer.Reader()
if err != nil {
return nil, err
}
fk := fieldKey.MarshalIndexRule()
var query bluge.Query
shouldDecodeTerm := true
if fieldKey.Analyzer == databasev1.IndexRule_ANALYZER_UNSPECIFIED {
query = bluge.NewTermRangeInclusiveQuery(
index.FieldStr(fieldKey, termRange.Lower),
index.FieldStr(fieldKey, termRange.Upper),
termRange.IncludesLower,
termRange.IncludesUpper,
).
SetField(fk)
} else {
shouldDecodeTerm = false
bQuery := bluge.NewBooleanQuery().
AddMust(bluge.NewTermRangeInclusiveQuery(
string(termRange.Lower),
string(termRange.Upper),
termRange.IncludesLower,
termRange.IncludesUpper,
).
SetField(fk))
if fieldKey.HasSeriesID() {
bQuery.AddMust(bluge.NewTermQuery(string(fieldKey.SeriesID.Marshal())).SetField(seriesIDField))
}
query = bQuery
}
sortedKey := fk
if order == modelv1.Sort_SORT_DESC {
sortedKey = "-" + sortedKey
}
documentMatchIterator, err := reader.Search(context.Background(), bluge.NewTopNSearch(math.MaxInt64, query).SortBy([]string{sortedKey}))
if err != nil {
return nil, err
}
result := newBlugeMatchIterator(documentMatchIterator, fk, shouldDecodeTerm, reader)
return &result, nil
}