@@ -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
516524type 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