From e39f46aa38490610fd4074789b4819bc92fa0705 Mon Sep 17 00:00:00 2001 From: PowderLi <135960789+PowderLi@users.noreply.github.com> Date: Sun, 3 Mar 2024 17:58:59 +0800 Subject: [PATCH] fix: use GetBinaryField incorrectly (#30969) issue: #30980 #22837 2.3 pr: #30873 should use GetBFloat16Field, GetBfloat16Field rather than GetBinaryField Signed-off-by: PowderLi --- .../distributed/proxy/httpserver/handler_v1.go | 3 +-- internal/distributed/proxy/httpserver/utils.go | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/internal/distributed/proxy/httpserver/handler_v1.go b/internal/distributed/proxy/httpserver/handler_v1.go index db46cd222a..45d5c56ca6 100644 --- a/internal/distributed/proxy/httpserver/handler_v1.go +++ b/internal/distributed/proxy/httpserver/handler_v1.go @@ -382,8 +382,7 @@ func (h *HandlersV1) getCollectionDetails(c *gin.Context) { } vectorField := "" for _, field := range coll.Schema.Fields { - if field.DataType == schemapb.DataType_BinaryVector || field.DataType == schemapb.DataType_FloatVector || - field.DataType == schemapb.DataType_Float16Vector || field.DataType == schemapb.DataType_BFloat16Vector { + if IsVectorField(field) { vectorField = field.Name break } diff --git a/internal/distributed/proxy/httpserver/utils.go b/internal/distributed/proxy/httpserver/utils.go index 949dd53157..eacf572dcb 100644 --- a/internal/distributed/proxy/httpserver/utils.go +++ b/internal/distributed/proxy/httpserver/utils.go @@ -123,6 +123,15 @@ func checkGetPrimaryKey(coll *schemapb.CollectionSchema, idResult gjson.Result) } // --------------------- collection details --------------------- // + +func IsVectorField(field *schemapb.FieldSchema) bool { + switch field.DataType { + case schemapb.DataType_BinaryVector, schemapb.DataType_FloatVector, schemapb.DataType_Float16Vector, schemapb.DataType_BFloat16Vector: + return true + } + return false +} + func printFields(fields []*schemapb.FieldSchema) []gin.H { var res []gin.H for _, field := range fields { @@ -133,8 +142,7 @@ func printFields(fields []*schemapb.FieldSchema) []gin.H { HTTPReturnFieldAutoID: field.AutoID, HTTPReturnDescription: field.Description, } - if field.DataType == schemapb.DataType_BinaryVector || field.DataType == schemapb.DataType_FloatVector || - field.DataType == schemapb.DataType_Float16Vector || field.DataType == schemapb.DataType_BFloat16Vector { + if IsVectorField(field) { dim, _ := getDim(field) fieldDetail[HTTPReturnFieldType] = field.DataType.String() + "(" + strconv.FormatInt(dim, 10) + ")" } else if field.DataType == schemapb.DataType_VarChar { @@ -1037,9 +1045,9 @@ func buildQueryResp(rowsNum int64, needFields []string, fieldDataList []*schemap case schemapb.DataType_FloatVector: row[fieldDataList[j].FieldName] = fieldDataList[j].GetVectors().GetFloatVector().Data[i*fieldDataList[j].GetVectors().GetDim() : (i+1)*fieldDataList[j].GetVectors().GetDim()] case schemapb.DataType_Float16Vector: - row[fieldDataList[j].FieldName] = fieldDataList[j].GetVectors().GetBinaryVector()[i*(fieldDataList[j].GetVectors().GetDim()*2) : (i+1)*(fieldDataList[j].GetVectors().GetDim()*2)] + row[fieldDataList[j].FieldName] = fieldDataList[j].GetVectors().GetFloat16Vector()[i*(fieldDataList[j].GetVectors().GetDim()*2) : (i+1)*(fieldDataList[j].GetVectors().GetDim()*2)] case schemapb.DataType_BFloat16Vector: - row[fieldDataList[j].FieldName] = fieldDataList[j].GetVectors().GetBinaryVector()[i*(fieldDataList[j].GetVectors().GetDim()*2) : (i+1)*(fieldDataList[j].GetVectors().GetDim()*2)] + row[fieldDataList[j].FieldName] = fieldDataList[j].GetVectors().GetBfloat16Vector()[i*(fieldDataList[j].GetVectors().GetDim()*2) : (i+1)*(fieldDataList[j].GetVectors().GetDim()*2)] case schemapb.DataType_Array: row[fieldDataList[j].FieldName] = fieldDataList[j].GetScalars().GetArrayData().Data[i] case schemapb.DataType_JSON: