KevinStephenson
Adding in weaviate code
b110593
raw
history blame
4.32 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package aggregation
import (
"fmt"
"github.com/weaviate/weaviate/entities/filters"
"github.com/weaviate/weaviate/entities/schema"
"github.com/weaviate/weaviate/entities/searchparams"
)
type Params struct {
Filters *filters.LocalFilter `json:"filters"`
ClassName schema.ClassName `json:"className"`
Properties []ParamProperty `json:"properties"`
GroupBy *filters.Path `json:"groupBy"`
IncludeMetaCount bool `json:"includeMetaCount"`
Limit *int `json:"limit"`
ObjectLimit *int `json:"objectLimit"`
SearchVector []float32 `json:"searchVector"`
Certainty float64 `json:"certainty"`
Tenant string `json:"tenant"`
ModuleParams map[string]interface{} `json:"moduleParams"`
NearVector *searchparams.NearVector `json:"nearVector"`
NearObject *searchparams.NearObject `json:"nearObject"`
Hybrid *searchparams.HybridSearch `json:"hybrid"`
}
type ParamProperty struct {
Name schema.PropertyName `json:"name"`
Aggregators []Aggregator `json:"aggregators"`
}
type Aggregator struct {
Type string `json:"type"`
Limit *int `json:"limit"` // used on TopOccurrence Agg
}
func (a Aggregator) String() string {
return a.Type
}
// Aggregators used in every prop
var (
CountAggregator = Aggregator{Type: "count"}
TypeAggregator = Aggregator{Type: "type"}
)
// Aggregators used in numerical props
var (
SumAggregator = Aggregator{Type: "sum"}
MeanAggregator = Aggregator{Type: "mean"}
ModeAggregator = Aggregator{Type: "mode"}
MedianAggregator = Aggregator{Type: "median"}
MaximumAggregator = Aggregator{Type: "maximum"}
MinimumAggregator = Aggregator{Type: "minimum"}
)
// Aggregators used in boolean props
var (
TotalTrueAggregator = Aggregator{Type: "totalTrue"}
PercentageTrueAggregator = Aggregator{Type: "percentageTrue"}
TotalFalseAggregator = Aggregator{Type: "totalFalse"}
PercentageFalseAggregator = Aggregator{Type: "percentageFalse"}
)
const TopOccurrencesType = "topOccurrences"
// NewTopOccurrencesAggregator creates a TopOccurrencesAggregator, we cannot
// use a singleton for this as the desired limit can be different each time
func NewTopOccurrencesAggregator(limit *int) Aggregator {
return Aggregator{Type: TopOccurrencesType, Limit: limit}
}
// Aggregators used in ref props
var (
PointingToAggregator = Aggregator{Type: "pointingTo"}
)
func ParseAggregatorProp(name string) (Aggregator, error) {
switch name {
// common
case CountAggregator.String():
return CountAggregator, nil
case TypeAggregator.String():
return TypeAggregator, nil
// numerical
case MeanAggregator.String():
return MeanAggregator, nil
case MedianAggregator.String():
return MedianAggregator, nil
case ModeAggregator.String():
return ModeAggregator, nil
case MaximumAggregator.String():
return MaximumAggregator, nil
case MinimumAggregator.String():
return MinimumAggregator, nil
case SumAggregator.String():
return SumAggregator, nil
// boolean
case TotalTrueAggregator.String():
return TotalTrueAggregator, nil
case TotalFalseAggregator.String():
return TotalFalseAggregator, nil
case PercentageTrueAggregator.String():
return PercentageTrueAggregator, nil
case PercentageFalseAggregator.String():
return PercentageFalseAggregator, nil
// string/text
case TopOccurrencesType:
return NewTopOccurrencesAggregator(ptInt(5)), nil // default to limit 5, can be overwritten
// ref
case PointingToAggregator.String():
return PointingToAggregator, nil
default:
return Aggregator{}, fmt.Errorf("unrecognized aggregator prop '%s'", name)
}
}
func ptInt(in int) *int {
return &in
}