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 <[email protected]>
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)

Reply via email to