@@ -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 {
@@ -1410,21 +1418,26 @@ func parseFTInfo(data map[string]interface{}) (FTInfoResult, error) {
14101418 for _ , attr := range attributes {
14111419 if attrMap , ok := attr .([]interface {}); ok {
14121420 att := FTAttribute {}
1413- for i := 0 ; i < len (attrMap ); i ++ {
1414- if internal .ToLower (internal .ToString (attrMap [i ])) == "attribute" {
1421+ attrLen := len (attrMap )
1422+ for i := 0 ; i < attrLen ; i ++ {
1423+ if internal .ToLower (internal .ToString (attrMap [i ])) == "attribute" && i + 1 < attrLen {
14151424 att .Attribute = internal .ToString (attrMap [i + 1 ])
1425+ i ++
14161426 continue
14171427 }
1418- if internal .ToLower (internal .ToString (attrMap [i ])) == "identifier" {
1428+ if internal .ToLower (internal .ToString (attrMap [i ])) == "identifier" && i + 1 < attrLen {
14191429 att .Identifier = internal .ToString (attrMap [i + 1 ])
1430+ i ++
14201431 continue
14211432 }
1422- if internal .ToLower (internal .ToString (attrMap [i ])) == "type" {
1433+ if internal .ToLower (internal .ToString (attrMap [i ])) == "type" && i + 1 < attrLen {
14231434 att .Type = internal .ToString (attrMap [i + 1 ])
1435+ i ++
14241436 continue
14251437 }
1426- if internal .ToLower (internal .ToString (attrMap [i ])) == "weight" {
1438+ if internal .ToLower (internal .ToString (attrMap [i ])) == "weight" && i + 1 < attrLen {
14271439 att .Weight = internal .ToFloat (attrMap [i + 1 ])
1440+ i ++
14281441 continue
14291442 }
14301443 if internal .ToLower (internal .ToString (attrMap [i ])) == "nostem" {
@@ -1443,7 +1456,7 @@ func parseFTInfo(data map[string]interface{}) (FTInfoResult, error) {
14431456 att .UNF = true
14441457 continue
14451458 }
1446- if internal .ToLower (internal .ToString (attrMap [i ])) == "phonetic" {
1459+ if internal .ToLower (internal .ToString (attrMap [i ])) == "phonetic" && i + 1 < attrLen {
14471460 att .PhoneticMatcher = internal .ToString (attrMap [i + 1 ])
14481461 continue
14491462 }
@@ -1456,6 +1469,38 @@ func parseFTInfo(data map[string]interface{}) (FTInfoResult, error) {
14561469 continue
14571470 }
14581471
1472+ // vector specific attributes
1473+ if internal .ToLower (internal .ToString (attrMap [i ])) == "algorithm" && i + 1 < attrLen {
1474+ att .Algorithm = internal .ToString (attrMap [i + 1 ])
1475+ i ++
1476+ continue
1477+ }
1478+ if internal .ToLower (internal .ToString (attrMap [i ])) == "data_type" && i + 1 < attrLen {
1479+ att .DataType = internal .ToString (attrMap [i + 1 ])
1480+ i ++
1481+ continue
1482+ }
1483+ if internal .ToLower (internal .ToString (attrMap [i ])) == "dim" && i + 1 < attrLen {
1484+ att .Dim = internal .ToInteger (attrMap [i + 1 ])
1485+ i ++
1486+ continue
1487+ }
1488+ if internal .ToLower (internal .ToString (attrMap [i ])) == "distance_metric" && i + 1 < attrLen {
1489+ att .DistanceMetric = internal .ToString (attrMap [i + 1 ])
1490+ i ++
1491+ continue
1492+ }
1493+ if internal .ToLower (internal .ToString (attrMap [i ])) == "m" && i + 1 < attrLen {
1494+ att .M = internal .ToInteger (attrMap [i + 1 ])
1495+ i ++
1496+ continue
1497+ }
1498+ if internal .ToLower (internal .ToString (attrMap [i ])) == "ef_construction" && i + 1 < attrLen {
1499+ att .EFConstruction = internal .ToInteger (attrMap [i + 1 ])
1500+ i ++
1501+ continue
1502+ }
1503+
14591504 }
14601505 ftInfo .Attributes = append (ftInfo .Attributes , att )
14611506 }
0 commit comments