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:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user