Spaces:
Running
Running
// _ _ | |
// __ _____ __ ___ ___ __ _| |_ ___ | |
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
// \ V V / __/ (_| |\ V /| | (_| | || __/ | |
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
// | |
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
// | |
// CONTACT: [email protected] | |
// | |
package aggregate | |
import ( | |
"fmt" | |
"os" | |
"github.com/tailor-inc/graphql" | |
"github.com/weaviate/weaviate/entities/models" | |
) | |
func hybridArgument(classObject *graphql.Object, | |
class *models.Class, modulesProvider ModulesProvider, | |
) *graphql.ArgumentConfig { | |
prefix := fmt.Sprintf("AggregateObjects%s", class.Class) | |
return &graphql.ArgumentConfig{ | |
Type: graphql.NewInputObject( | |
graphql.InputObjectConfig{ | |
Name: fmt.Sprintf("%sHybridInpObj", prefix), | |
Fields: hybridOperands(classObject, class, modulesProvider), | |
Description: "Hybrid search", | |
}, | |
), | |
} | |
} | |
func hybridOperands(classObject *graphql.Object, | |
class *models.Class, modulesProvider ModulesProvider, | |
) graphql.InputObjectConfigFieldMap { | |
ss := graphql.NewInputObject(graphql.InputObjectConfig{ | |
Name: class.Class + "HybridSubSearch", | |
Fields: hybridSubSearch(classObject, class, modulesProvider), | |
}) | |
fieldMap := graphql.InputObjectConfigFieldMap{ | |
"query": &graphql.InputObjectFieldConfig{ | |
Description: "Query string", | |
Type: graphql.String, | |
}, | |
"alpha": &graphql.InputObjectFieldConfig{ | |
Description: "Search weight", | |
Type: graphql.Float, | |
}, | |
"vector": &graphql.InputObjectFieldConfig{ | |
Description: "Vector search", | |
Type: graphql.NewList(graphql.Float), | |
}, | |
} | |
if os.Getenv("ENABLE_EXPERIMENTAL_HYBRID_OPERANDS") != "" { | |
fieldMap["operands"] = &graphql.InputObjectFieldConfig{ | |
Description: "Subsearch list", | |
Type: graphql.NewList(ss), | |
} | |
} | |
return fieldMap | |
} | |
func hybridSubSearch(classObject *graphql.Object, | |
class *models.Class, modulesProvider ModulesProvider, | |
) graphql.InputObjectConfigFieldMap { | |
prefixName := class.Class + "SubSearch" | |
return graphql.InputObjectConfigFieldMap{ | |
"weight": &graphql.InputObjectFieldConfig{ | |
Description: "weight, 0 to 1", | |
Type: graphql.Float, | |
}, | |
"sparseSearch": &graphql.InputObjectFieldConfig{ | |
Description: "Sparse Search", | |
Type: graphql.NewInputObject( | |
graphql.InputObjectConfig{ | |
Name: fmt.Sprintf("%sHybridAggregateBM25InpObj", prefixName), | |
Fields: bm25Fields(prefixName), | |
Description: "BM25f search", | |
}, | |
), | |
}, | |
} | |
} | |