func()

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
}