in pkg/index/inverted/inverted.go [186:265]
func (s *store) Iterator(ctx context.Context, fieldKey index.FieldKey, termRange index.RangeOpts, order modelv1.Sort,
preLoadSize int,
) (iter index.FieldIterator[*index.DocumentResult], err error) {
if !termRange.IsEmpty() && !termRange.Valid() {
return index.DummyFieldIterator, nil
}
if !s.closer.AddRunning() {
return nil, nil
}
reader, err := s.writer.Reader()
if err != nil {
return nil, err
}
fk := fieldKey.Marshal()
rangeQuery := bluge.NewBooleanQuery()
rangeNode := newMustNode()
rangeQuery = rangeQuery.AddMust(bluge.NewTermQuery(string(fieldKey.SeriesID.Marshal())).
SetField(seriesIDField))
rangeNode.Append(newTermNode(string(fieldKey.SeriesID.Marshal()), nil))
if !termRange.IsEmpty() && termRange.Valid() {
switch lower := termRange.Lower.(type) {
case *index.BytesTermValue:
upper := termRange.Upper.(*index.BytesTermValue)
rangeQuery.AddMust(bluge.NewTermRangeInclusiveQuery(
string(lower.Value),
string(upper.Value),
termRange.IncludesLower,
termRange.IncludesUpper,
).
SetField(fk))
rangeNode.Append(newTermRangeInclusiveNode(
string(lower.Value),
string(upper.Value),
termRange.IncludesLower,
termRange.IncludesUpper, nil,
false,
))
case *index.FloatTermValue:
upper := termRange.Upper.(*index.FloatTermValue)
rangeQuery.AddMust(bluge.NewNumericRangeInclusiveQuery(
lower.Value,
upper.Value,
termRange.IncludesLower,
termRange.IncludesUpper,
).
SetField(fk))
rangeNode.Append(newTermRangeInclusiveNode(
strconv.FormatFloat(lower.Value, 'f', -1, 64),
strconv.FormatFloat(upper.Value, 'f', -1, 64),
termRange.IncludesLower,
termRange.IncludesUpper,
nil,
false,
))
default:
logger.Panicf("unexpected field type: %T", lower)
}
}
if n := appendTimeRangeToQuery(rangeQuery, fieldKey); n != nil {
rangeNode.Append(n)
}
sortedKey := fk
if order == modelv1.Sort_SORT_DESC {
sortedKey = "-" + sortedKey
}
result := &sortIterator{
query: &queryNode{rangeQuery, rangeNode},
reader: reader,
sortedKey: sortedKey,
size: preLoadSize,
closer: s.closer,
ctx: ctx,
newIterator: newBlugeMatchIterator,
}
return result, nil
}