diff --git a/document/field_boolean.go b/document/field_boolean.go index fdf3cc0e5..8c2987a7f 100644 --- a/document/field_boolean.go +++ b/document/field_boolean.go @@ -43,10 +43,15 @@ type BooleanField struct { } func (b *BooleanField) Size() int { + var freqSize int + if b.frequencies != nil { + freqSize = b.frequencies.Size() + } return reflectStaticSizeBooleanField + size.SizeOfPtr + len(b.name) + len(b.arrayPositions)*size.SizeOfUint64 + - len(b.value) + len(b.value) + + freqSize } func (b *BooleanField) Name() string { diff --git a/document/field_composite.go b/document/field_composite.go index 8c47643f5..e0ba8af7a 100644 --- a/document/field_composite.go +++ b/document/field_composite.go @@ -68,13 +68,16 @@ func (c *CompositeField) Size() int { sizeInBytes := reflectStaticSizeCompositeField + size.SizeOfPtr + len(c.name) - for k, _ := range c.includedFields { + for k := range c.includedFields { sizeInBytes += size.SizeOfString + len(k) + size.SizeOfBool } - for k, _ := range c.excludedFields { + for k := range c.excludedFields { sizeInBytes += size.SizeOfString + len(k) + size.SizeOfBool } + if c.compositeFrequencies != nil { + sizeInBytes += c.compositeFrequencies.Size() + } return sizeInBytes } diff --git a/document/field_datetime.go b/document/field_datetime.go index efdd26b60..f3b859c43 100644 --- a/document/field_datetime.go +++ b/document/field_datetime.go @@ -53,9 +53,15 @@ type DateTimeField struct { } func (n *DateTimeField) Size() int { + var freqSize int + if n.frequencies != nil { + freqSize = n.frequencies.Size() + } return reflectStaticSizeDateTimeField + size.SizeOfPtr + len(n.name) + - len(n.arrayPositions)*size.SizeOfUint64 + len(n.arrayPositions)*size.SizeOfUint64 + + len(n.value) + + freqSize } func (n *DateTimeField) Name() string { diff --git a/document/field_geopoint.go b/document/field_geopoint.go index 719d18c35..5795043f2 100644 --- a/document/field_geopoint.go +++ b/document/field_geopoint.go @@ -47,9 +47,15 @@ type GeoPointField struct { } func (n *GeoPointField) Size() int { + var freqSize int + if n.frequencies != nil { + freqSize = n.frequencies.Size() + } return reflectStaticSizeGeoPointField + size.SizeOfPtr + len(n.name) + - len(n.arrayPositions)*size.SizeOfUint64 + len(n.arrayPositions)*size.SizeOfUint64 + + len(n.value) + + freqSize } func (n *GeoPointField) Name() string { diff --git a/document/field_geoshape.go b/document/field_geoshape.go index a20ff1837..6bf7b010a 100644 --- a/document/field_geoshape.go +++ b/document/field_geoshape.go @@ -48,9 +48,16 @@ type GeoShapeField struct { } func (n *GeoShapeField) Size() int { + var freqSize int + if n.frequencies != nil { + freqSize = n.frequencies.Size() + } return reflectStaticSizeGeoShapeField + size.SizeOfPtr + len(n.name) + - len(n.arrayPositions)*size.SizeOfUint64 + len(n.arrayPositions)*size.SizeOfUint64 + + len(n.encodedValue) + + len(n.value) + + freqSize } func (n *GeoShapeField) Name() string { diff --git a/document/field_ip.go b/document/field_ip.go index 1e5be5006..80a353a01 100644 --- a/document/field_ip.go +++ b/document/field_ip.go @@ -44,10 +44,15 @@ type IPField struct { } func (b *IPField) Size() int { + var freqSize int + if b.frequencies != nil { + freqSize = b.frequencies.Size() + } return reflectStaticSizeIPField + size.SizeOfPtr + len(b.name) + len(b.arrayPositions)*size.SizeOfUint64 + - len(b.value) + len(b.value) + + freqSize } func (b *IPField) Name() string { diff --git a/document/field_numeric.go b/document/field_numeric.go index a54b082b4..1ee7b75ee 100644 --- a/document/field_numeric.go +++ b/document/field_numeric.go @@ -46,9 +46,15 @@ type NumericField struct { } func (n *NumericField) Size() int { + var freqSize int + if n.frequencies != nil { + freqSize = n.frequencies.Size() + } return reflectStaticSizeNumericField + size.SizeOfPtr + len(n.name) + - len(n.arrayPositions)*size.SizeOfPtr + len(n.arrayPositions)*size.SizeOfUint64 + + len(n.value) + + freqSize } func (n *NumericField) Name() string { diff --git a/document/field_text.go b/document/field_text.go index fddc59d09..d35e74732 100644 --- a/document/field_text.go +++ b/document/field_text.go @@ -44,10 +44,15 @@ type TextField struct { } func (t *TextField) Size() int { + var freqSize int + if t.frequencies != nil { + freqSize = t.frequencies.Size() + } return reflectStaticSizeTextField + size.SizeOfPtr + len(t.name) + len(t.arrayPositions)*size.SizeOfUint64 + - len(t.value) + len(t.value) + + freqSize } func (t *TextField) Name() string { diff --git a/document/field_vector.go b/document/field_vector.go index b019361cb..53334d202 100644 --- a/document/field_vector.go +++ b/document/field_vector.go @@ -47,6 +47,8 @@ type VectorField struct { func (n *VectorField) Size() int { return reflectStaticSizeVectorField + size.SizeOfPtr + len(n.name) + + len(n.similarity) + + len(n.vectorIndexOptimizedFor) + int(numBytesFloat32s(n.value)) } diff --git a/document/field_vector_base64.go b/document/field_vector_base64.go index 67825960a..31d6cbffd 100644 --- a/document/field_vector_base64.go +++ b/document/field_vector_base64.go @@ -22,19 +22,33 @@ import ( "encoding/binary" "fmt" "math" + "reflect" "github.com/blevesearch/bleve/v2/size" "github.com/blevesearch/bleve/v2/util" index "github.com/blevesearch/bleve_index_api" ) +var reflectStaticSizeVectorBase64Field int + +func init() { + var f VectorBase64Field + reflectStaticSizeVectorBase64Field = int(reflect.TypeOf(f).Size()) +} + type VectorBase64Field struct { vectorField *VectorField base64Encoding string } func (n *VectorBase64Field) Size() int { - return n.vectorField.Size() + var vecFieldSize int + if n.vectorField != nil { + vecFieldSize = n.vectorField.Size() + } + return reflectStaticSizeVectorBase64Field + size.SizeOfPtr + + len(n.base64Encoding) + + vecFieldSize } func (n *VectorBase64Field) Name() string { diff --git a/index/scorch/snapshot_index_vr.go b/index/scorch/snapshot_index_vr.go index 04a9e0e6d..79e3271c3 100644 --- a/index/scorch/snapshot_index_vr.go +++ b/index/scorch/snapshot_index_vr.go @@ -52,7 +52,9 @@ type IndexSnapshotVectorReader struct { func (i *IndexSnapshotVectorReader) Size() int { sizeInBytes := reflectStaticSizeIndexSnapshotVectorReader + size.SizeOfPtr + - len(i.vector) + len(i.field) + len(i.currID) + len(i.vector)*size.SizeOfFloat32 + + len(i.field) + + len(i.currID) for _, entry := range i.postings { sizeInBytes += entry.Size() diff --git a/search/scorer/scorer_knn.go b/search/scorer/scorer_knn.go index 326b435d6..2f832efab 100644 --- a/search/scorer/scorer_knn.go +++ b/search/scorer/scorer_knn.go @@ -47,7 +47,8 @@ type KNNQueryScorer struct { func (s *KNNQueryScorer) Size() int { sizeInBytes := reflectStaticSizeKNNQueryScorer + size.SizeOfPtr + - (len(s.queryVector) * size.SizeOfFloat32) + len(s.queryField) + (len(s.queryVector) * size.SizeOfFloat32) + len(s.queryField) + + len(s.similarityMetric) if s.queryWeightExplanation != nil { sizeInBytes += s.queryWeightExplanation.Size()