Skip to content

Commit 5fdc947

Browse files
authored
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
1 parent 042610b commit 5fdc947

File tree

3 files changed

+548
-6
lines changed

3 files changed

+548
-6
lines changed

search_commands.go

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,14 @@ type FTAttribute struct {
511511
PhoneticMatcher string
512512
CaseSensitive bool
513513
WithSuffixtrie bool
514+
515+
// Vector specific attributes
516+
Algorithm string
517+
DataType string
518+
Dim int
519+
DistanceMetric string
520+
M int
521+
EFConstruction int
514522
}
515523

516524
type CursorStats struct {
@@ -1384,21 +1392,26 @@ func parseFTInfo(data map[string]interface{}) (FTInfoResult, error) {
13841392
for _, attr := range attributes {
13851393
if attrMap, ok := attr.([]interface{}); ok {
13861394
att := FTAttribute{}
1387-
for i := 0; i < len(attrMap); i++ {
1388-
if internal.ToLower(internal.ToString(attrMap[i])) == "attribute" {
1395+
attrLen := len(attrMap)
1396+
for i := 0; i < attrLen; i++ {
1397+
if internal.ToLower(internal.ToString(attrMap[i])) == "attribute" && i+1 < attrLen {
13891398
att.Attribute = internal.ToString(attrMap[i+1])
1399+
i++
13901400
continue
13911401
}
1392-
if internal.ToLower(internal.ToString(attrMap[i])) == "identifier" {
1402+
if internal.ToLower(internal.ToString(attrMap[i])) == "identifier" && i+1 < attrLen {
13931403
att.Identifier = internal.ToString(attrMap[i+1])
1404+
i++
13941405
continue
13951406
}
1396-
if internal.ToLower(internal.ToString(attrMap[i])) == "type" {
1407+
if internal.ToLower(internal.ToString(attrMap[i])) == "type" && i+1 < attrLen {
13971408
att.Type = internal.ToString(attrMap[i+1])
1409+
i++
13981410
continue
13991411
}
1400-
if internal.ToLower(internal.ToString(attrMap[i])) == "weight" {
1412+
if internal.ToLower(internal.ToString(attrMap[i])) == "weight" && i+1 < attrLen {
14011413
att.Weight = internal.ToFloat(attrMap[i+1])
1414+
i++
14021415
continue
14031416
}
14041417
if internal.ToLower(internal.ToString(attrMap[i])) == "nostem" {
@@ -1417,7 +1430,7 @@ func parseFTInfo(data map[string]interface{}) (FTInfoResult, error) {
14171430
att.UNF = true
14181431
continue
14191432
}
1420-
if internal.ToLower(internal.ToString(attrMap[i])) == "phonetic" {
1433+
if internal.ToLower(internal.ToString(attrMap[i])) == "phonetic" && i+1 < attrLen {
14211434
att.PhoneticMatcher = internal.ToString(attrMap[i+1])
14221435
continue
14231436
}
@@ -1430,6 +1443,38 @@ func parseFTInfo(data map[string]interface{}) (FTInfoResult, error) {
14301443
continue
14311444
}
14321445

1446+
// vector specific attributes
1447+
if internal.ToLower(internal.ToString(attrMap[i])) == "algorithm" && i+1 < attrLen {
1448+
att.Algorithm = internal.ToString(attrMap[i+1])
1449+
i++
1450+
continue
1451+
}
1452+
if internal.ToLower(internal.ToString(attrMap[i])) == "data_type" && i+1 < attrLen {
1453+
att.DataType = internal.ToString(attrMap[i+1])
1454+
i++
1455+
continue
1456+
}
1457+
if internal.ToLower(internal.ToString(attrMap[i])) == "dim" && i+1 < attrLen {
1458+
att.Dim = internal.ToInteger(attrMap[i+1])
1459+
i++
1460+
continue
1461+
}
1462+
if internal.ToLower(internal.ToString(attrMap[i])) == "distance_metric" && i+1 < attrLen {
1463+
att.DistanceMetric = internal.ToString(attrMap[i+1])
1464+
i++
1465+
continue
1466+
}
1467+
if internal.ToLower(internal.ToString(attrMap[i])) == "m" && i+1 < attrLen {
1468+
att.M = internal.ToInteger(attrMap[i+1])
1469+
i++
1470+
continue
1471+
}
1472+
if internal.ToLower(internal.ToString(attrMap[i])) == "ef_construction" && i+1 < attrLen {
1473+
att.EFConstruction = internal.ToInteger(attrMap[i+1])
1474+
i++
1475+
continue
1476+
}
1477+
14331478
}
14341479
ftInfo.Attributes = append(ftInfo.Attributes, att)
14351480
}

0 commit comments

Comments
 (0)