KevinStephenson
Adding in weaviate code
b110593
raw
history blame
2.91 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package filters
import (
"encoding/json"
"github.com/weaviate/weaviate/entities/models"
"github.com/weaviate/weaviate/entities/schema"
)
type Operator int
const (
OperatorEqual Operator = iota + 1
OperatorNotEqual
OperatorGreaterThan
OperatorGreaterThanEqual
OperatorLessThan
OperatorLessThanEqual
OperatorAnd
OperatorOr
OperatorWithinGeoRange
OperatorLike
OperatorIsNull
ContainsAny
ContainsAll
)
func (o Operator) OnValue() bool {
switch o {
case OperatorEqual,
OperatorNotEqual,
OperatorGreaterThan,
OperatorGreaterThanEqual,
OperatorLessThan,
OperatorLessThanEqual,
OperatorWithinGeoRange,
OperatorLike,
OperatorIsNull,
ContainsAny,
ContainsAll:
return true
default:
return false
}
}
func (o Operator) Name() string {
switch o {
case OperatorEqual:
return "Equal"
case OperatorNotEqual:
return "NotEqual"
case OperatorGreaterThan:
return "GreaterThan"
case OperatorGreaterThanEqual:
return "GreaterThanEqual"
case OperatorLessThan:
return "LessThan"
case OperatorLessThanEqual:
return "LessThanEqual"
case OperatorAnd:
return "And"
case OperatorOr:
return "Or"
case OperatorWithinGeoRange:
return "WithinGeoRange"
case OperatorLike:
return "Like"
case OperatorIsNull:
return "IsNull"
case ContainsAny:
return "ContainsAny"
case ContainsAll:
return "ContainsAll"
default:
panic("Unknown operator")
}
}
type LocalFilter struct {
Root *Clause `json:"root"`
}
type Value struct {
Value interface{} `json:"value"`
Type schema.DataType `json:"type"`
}
func (v *Value) UnmarshalJSON(data []byte) error {
type Alias Value
aux := struct {
*Alias
}{
Alias: (*Alias)(v),
}
err := json.Unmarshal(data, &aux)
if err != nil {
return err
}
asFloat, ok := v.Value.(float64)
if v.Type == schema.DataTypeInt && ok {
v.Value = int(asFloat)
}
if v.Type == schema.DataTypeGeoCoordinates {
temp := struct {
Value GeoRange `json:"value"`
}{}
if err := json.Unmarshal(data, &temp); err != nil {
return err
}
v.Value = temp.Value
}
return nil
}
type Clause struct {
Operator Operator `json:"operator"`
On *Path `json:"on"`
Value *Value `json:"value"`
Operands []Clause `json:"operands"`
}
// GeoRange to be used with fields of type GeoCoordinates. Identifies a point
// and a maximum distance from that point.
type GeoRange struct {
*models.GeoCoordinates
Distance float32 `json:"distance"`
}