1
0
mirror of https://github.com/redis/go-redis.git synced 2025-11-26 06:23:09 +03:00

feat(ftinfo): add vector specific attributes in ftinfo (#3596)

* add vector specific attributes in ftinfo

* safer parsing

* try to fix tests

* oops, should test agains resp2 only

* fix asserts

* skip test for RE
This commit is contained in:
Nedyalko Dyakov
2025-11-12 13:29:26 +02:00
committed by GitHub
parent 042610b79d
commit 5fdc947723
3 changed files with 548 additions and 6 deletions

View File

@@ -511,6 +511,14 @@ type FTAttribute struct {
PhoneticMatcher string
CaseSensitive bool
WithSuffixtrie bool
// Vector specific attributes
Algorithm string
DataType string
Dim int
DistanceMetric string
M int
EFConstruction int
}
type CursorStats struct {
@@ -1384,21 +1392,26 @@ func parseFTInfo(data map[string]interface{}) (FTInfoResult, error) {
for _, attr := range attributes {
if attrMap, ok := attr.([]interface{}); ok {
att := FTAttribute{}
for i := 0; i < len(attrMap); i++ {
if internal.ToLower(internal.ToString(attrMap[i])) == "attribute" {
attrLen := len(attrMap)
for i := 0; i < attrLen; i++ {
if internal.ToLower(internal.ToString(attrMap[i])) == "attribute" && i+1 < attrLen {
att.Attribute = internal.ToString(attrMap[i+1])
i++
continue
}
if internal.ToLower(internal.ToString(attrMap[i])) == "identifier" {
if internal.ToLower(internal.ToString(attrMap[i])) == "identifier" && i+1 < attrLen {
att.Identifier = internal.ToString(attrMap[i+1])
i++
continue
}
if internal.ToLower(internal.ToString(attrMap[i])) == "type" {
if internal.ToLower(internal.ToString(attrMap[i])) == "type" && i+1 < attrLen {
att.Type = internal.ToString(attrMap[i+1])
i++
continue
}
if internal.ToLower(internal.ToString(attrMap[i])) == "weight" {
if internal.ToLower(internal.ToString(attrMap[i])) == "weight" && i+1 < attrLen {
att.Weight = internal.ToFloat(attrMap[i+1])
i++
continue
}
if internal.ToLower(internal.ToString(attrMap[i])) == "nostem" {
@@ -1417,7 +1430,7 @@ func parseFTInfo(data map[string]interface{}) (FTInfoResult, error) {
att.UNF = true
continue
}
if internal.ToLower(internal.ToString(attrMap[i])) == "phonetic" {
if internal.ToLower(internal.ToString(attrMap[i])) == "phonetic" && i+1 < attrLen {
att.PhoneticMatcher = internal.ToString(attrMap[i+1])
continue
}
@@ -1430,6 +1443,38 @@ func parseFTInfo(data map[string]interface{}) (FTInfoResult, error) {
continue
}
// vector specific attributes
if internal.ToLower(internal.ToString(attrMap[i])) == "algorithm" && i+1 < attrLen {
att.Algorithm = internal.ToString(attrMap[i+1])
i++
continue
}
if internal.ToLower(internal.ToString(attrMap[i])) == "data_type" && i+1 < attrLen {
att.DataType = internal.ToString(attrMap[i+1])
i++
continue
}
if internal.ToLower(internal.ToString(attrMap[i])) == "dim" && i+1 < attrLen {
att.Dim = internal.ToInteger(attrMap[i+1])
i++
continue
}
if internal.ToLower(internal.ToString(attrMap[i])) == "distance_metric" && i+1 < attrLen {
att.DistanceMetric = internal.ToString(attrMap[i+1])
i++
continue
}
if internal.ToLower(internal.ToString(attrMap[i])) == "m" && i+1 < attrLen {
att.M = internal.ToInteger(attrMap[i+1])
i++
continue
}
if internal.ToLower(internal.ToString(attrMap[i])) == "ef_construction" && i+1 < attrLen {
att.EFConstruction = internal.ToInteger(attrMap[i+1])
i++
continue
}
}
ftInfo.Attributes = append(ftInfo.Attributes, att)
}