KevinStephenson
Adding in weaviate code
b110593
raw
history blame
2.32 kB
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package summary
import (
"context"
"errors"
"fmt"
"github.com/weaviate/weaviate/entities/models"
"github.com/weaviate/weaviate/entities/search"
"github.com/weaviate/weaviate/modules/sum-transformers/ent"
)
func (p *SummaryProvider) findSummary(ctx context.Context,
in []search.Result, params *Params,
) ([]search.Result, error) {
if len(in) == 0 {
return nil, nil
} else {
if params == nil {
return nil, fmt.Errorf("no params provided")
}
properties := params.GetProperties()
// check if user parameter values are valid
if len(properties) == 0 {
return in, errors.New("no properties provided")
}
for i := range in { // for each result of the general GraphQL Query
ap := in[i].AdditionalProperties
if ap == nil {
ap = models.AdditionalProperties{}
}
// check if the schema of the GraphQL data object contains the properties and they are text or string values
textProperties := map[string]string{}
schema := in[i].Object().Properties.(map[string]interface{})
for property, value := range schema {
if p.containsProperty(property, properties) {
if valueString, ok := value.(string); ok && len(valueString) > 0 {
textProperties[property] = valueString
}
}
}
summaryList := []ent.SummaryResult{}
// for each text property result, call the SUM function and add to additional result
for property, value := range textProperties {
summary, err := p.sum.GetSummary(ctx, property, value)
if err != nil {
return in, err
}
summaryList = append(summaryList, summary...)
}
ap["summary"] = summaryList
in[i].AdditionalProperties = ap
}
}
return in, nil
}
func (p *SummaryProvider) containsProperty(property string, properties []string) bool {
if len(properties) == 0 {
return true
}
for i := range properties {
if properties[i] == property {
return true
}
}
return false
}