You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by ha...@apache.org on 2024/11/15 04:53:23 UTC

(skywalking-banyandb) 03/05: Merge remote-tracking branch 'origin/index' into index

This is an automated email from the ASF dual-hosted git repository.

hanahmily pushed a commit to branch index
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git

commit f405da318a01f91390b5b4fcb542e71dbaca9121
Merge: dbc21e88 66574f0d
Author: Gao Hongtao <ha...@gmail.com>
AuthorDate: Wed Nov 13 10:26:16 2024 +0800

    Merge remote-tracking branch 'origin/index' into index

 api/proto/banyandb/database/v1/schema.proto |   2 +
 banyand/internal/storage/index.go           |  52 ++++-----
 banyand/internal/storage/index_test.go      |   2 +-
 banyand/internal/storage/storage.go         |   2 +-
 banyand/measure/query.go                    | 168 +++++++++++++++++++++++++---
 banyand/measure/write.go                    |  35 ++++--
 docs/api-reference.md                       |   1 +
 pkg/index/index.go                          |  10 +-
 pkg/index/inverted/inverted.go              |   5 +-
 pkg/index/inverted/inverted_series.go       |  31 +++--
 pkg/partition/index.go                      |  25 +++--
 pkg/query/model/model.go                    |  20 ++++
 12 files changed, 277 insertions(+), 76 deletions(-)

diff --cc banyand/internal/storage/index.go
index ef963983,fc5083c3..ba3bd443
--- a/banyand/internal/storage/index.go
+++ b/banyand/internal/storage/index.go
@@@ -243,12 -245,12 +245,12 @@@ func (s *seriesIndex) Search(ctx contex
  	}
  	query, err := s.store.BuildQuery(seriesMatchers, opts.Query)
  	if err != nil {
- 		return nil, nil, err
+ 		return nil, nil, nil, err
  	}
 -	iter, err := s.store.Iterator(ctx, fieldKey, rangeOpts,
 +	iter, err := s.store.SeriesSort(ctx, fieldKey, rangeOpts,
  		opts.Order.Sort, opts.PreloadSize, query, opts.Projection)
  	if err != nil {
- 		return nil, nil, err
+ 		return nil, nil, nil, err
  	}
  	defer func() {
  		err = multierr.Append(err, iter.Close())
diff --cc banyand/measure/write.go
index bb6165d3,13d5aec0..6f5a9659
--- a/banyand/measure/write.go
+++ b/banyand/measure/write.go
@@@ -156,27 -156,33 +156,35 @@@ func (w *writeCallback) handle(dst map[
  				t.Name,
  				t.Type,
  				tagValue)
- 			if r, ok := tfr[t.Name]; ok {
+ 			r, ok := tfr[t.Name]
+ 			if ok || stm.schema.NonTimeSeries {
+ 				fieldKey := index.FieldKey{}
+ 				switch {
+ 				case ok:
+ 					fieldKey.IndexRuleID = r.GetMetadata().GetId()
+ 					fieldKey.Analyzer = r.Analyzer
+ 				case stm.schema.NonTimeSeries:
+ 					fieldKey.TagName = t.Name
+ 				default:
+ 					logger.Panicf("metadata crashed, tag family rule %s not found", t.Name)
+ 				}
+ 				toIndex := ok || !stm.schema.NonTimeSeries
  				if encodeTagValue.value != nil {
  					fields = append(fields, index.Field{
- 						Key: index.FieldKey{
- 							IndexRuleID: r.GetMetadata().GetId(),
- 							Analyzer:    r.Analyzer,
- 						},
 -						Key:   fieldKey,
 -						Term:  encodeTagValue.value,
 -						Store: true,
 -						Index: toIndex,
++						Key:    fieldKey,
 +						Term:   encodeTagValue.value,
 +						Store:  true,
++						Index:  toIndex,
 +						NoSort: r.GetNoSort(),
  					})
  				} else {
  					for _, val := range encodeTagValue.valueArr {
  						fields = append(fields, index.Field{
- 							Key: index.FieldKey{
- 								IndexRuleID: r.GetMetadata().GetId(),
- 								Analyzer:    r.Analyzer,
- 							},
 -							Key:   fieldKey,
 -							Term:  val,
 -							Store: true,
 -							Index: toIndex,
++							Key:    fieldKey,
 +							Term:   val,
 +							Store:  true,
++							Index:  toIndex,
 +							NoSort: r.GetNoSort(),
  						})
  					}
  				}
diff --cc pkg/index/index.go
index fdcb2c92,0b225581..11e6e379
--- a/pkg/index/index.go
+++ b/pkg/index/index.go
@@@ -208,15 -217,11 +213,16 @@@ func (s Series) String() string 
  	return fmt.Sprintf("%s:%d", s.EntityValues, s.ID)
  }
  
 +// SortedField returns the value of the sorted field.
 +func (s Series) SortedField() []byte {
 +	return s.EntityValues
 +}
 +
  // SeriesDocument represents a series document in an index.
  type SeriesDocument struct {
- 	Fields map[string][]byte
- 	Key    Series
+ 	Fields    map[string][]byte
+ 	Timestamp int64
+ 	Key       Series
  }
  
  // SeriesStore is an abstract of a series repository.
diff --cc pkg/index/inverted/inverted_series.go
index dcb8b3ed,dd02dd02..1f245c67
--- a/pkg/index/inverted/inverted_series.go
+++ b/pkg/index/inverted/inverted_series.go
@@@ -192,16 -152,19 +203,18 @@@ func parseResult(dmi search.DocumentMat
  					docIDMap[id] = struct{}{}
  				}
  			case entityField:
 -				fmt.Printf("entityField: %v\n", vv)
  				doc.Key.EntityValues = value
+ 			case timestampField:
+ 				ts, errTime := bluge.DecodeDateTime(value)
+ 				if errTime != nil {
+ 					return nil, err
+ 				}
+ 				doc.Timestamp = ts.UnixNano()
  			default:
- 				if _, ok := doc.Fields[field]; ok {
- 					doc.Fields[field] = bytes.Clone(value)
+ 				if _, ok := doc.Fields[fields[i]]; ok {
+ 					doc.Fields[fields[i]] = bytes.Clone(value)
  				}
  			}
- 			return true
- 		})
- 		if err != nil {
- 			return nil, errors.WithMessagef(err, "visit stored fields, hit: %d", hitNumber)
  		}
  		if doc.Key.ID > 0 {
  			result = append(result, doc)