diff --git a/internal/core/src/common/LoadInfo.h b/internal/core/src/common/LoadInfo.h
index ec6655af464380a3caacf06a3aa1f2c91117c2d3..d2401563d58d9a267128edea602a909dd43059dd 100644
--- a/internal/core/src/common/LoadInfo.h
+++ b/internal/core/src/common/LoadInfo.h
@@ -16,7 +16,6 @@
 #include "knowhere/index/vector_index/VecIndex.h"
 
 struct LoadIndexInfo {
-    std::string field_name;
     int64_t field_id;
     std::map<std::string, std::string> index_params;
     milvus::knowhere::VecIndexPtr index;
diff --git a/internal/core/src/segcore/load_index_c.cpp b/internal/core/src/segcore/load_index_c.cpp
index 21d5637f1be67e917121de565b6517d03e2eb16e..b58295b04954293a175ffb3d18d08c4a5fc4e59f 100644
--- a/internal/core/src/segcore/load_index_c.cpp
+++ b/internal/core/src/segcore/load_index_c.cpp
@@ -59,11 +59,9 @@ AppendIndexParam(CLoadIndexInfo c_load_index_info, const char* c_index_key, cons
 }
 
 CStatus
-AppendFieldInfo(CLoadIndexInfo c_load_index_info, const char* c_field_name, int64_t field_id) {
+AppendFieldInfo(CLoadIndexInfo c_load_index_info, int64_t field_id) {
     try {
         auto load_index_info = (LoadIndexInfo*)c_load_index_info;
-        std::string field_name(c_field_name);
-        load_index_info->field_name = field_name;
         load_index_info->field_id = field_id;
 
         auto status = CStatus();
@@ -97,7 +95,6 @@ AppendIndex(CLoadIndexInfo c_load_index_info, CBinarySet c_binary_set) {
         load_index_info->index =
             milvus::knowhere::VecIndexFactory::GetInstance().CreateVecIndex(index_params["index_type"], mode);
         load_index_info->index->Load(*binary_set);
-
         auto status = CStatus();
         status.error_code = Success;
         status.error_msg = "";
diff --git a/internal/core/src/segcore/load_index_c.h b/internal/core/src/segcore/load_index_c.h
index 0718d59406e621ded524809e0b840ae9697c5e32..85df9c40795c53b1a049e9ac7a66eacabaf034c7 100644
--- a/internal/core/src/segcore/load_index_c.h
+++ b/internal/core/src/segcore/load_index_c.h
@@ -33,7 +33,7 @@ CStatus
 AppendIndexParam(CLoadIndexInfo c_load_index_info, const char* index_key, const char* index_value);
 
 CStatus
-AppendFieldInfo(CLoadIndexInfo c_load_index_info, const char* field_name, int64_t field_id);
+AppendFieldInfo(CLoadIndexInfo c_load_index_info, int64_t field_id);
 
 CStatus
 AppendIndex(CLoadIndexInfo c_load_index_info, CBinarySet c_binary_set);
diff --git a/internal/core/unittest/test_c_api.cpp b/internal/core/unittest/test_c_api.cpp
index 73a32d93913deb57321a983caf79fbc3eca80969..2e972fc24412bf4bd76f62fdf10740d2a2c03dac 100644
--- a/internal/core/unittest/test_c_api.cpp
+++ b/internal/core/unittest/test_c_api.cpp
@@ -781,7 +781,7 @@ TEST(CApiTest, LoadIndexInfo) {
     status = AppendIndexParam(c_load_index_info, index_param_key2.data(), index_param_value2.data());
     assert(status.error_code == Success);
     std::string field_name = "field0";
-    status = AppendFieldInfo(c_load_index_info, field_name.data(), 0);
+    status = AppendFieldInfo(c_load_index_info, 0);
     assert(status.error_code == Success);
     status = AppendIndex(c_load_index_info, c_binary_set);
     assert(status.error_code == Success);
@@ -937,7 +937,7 @@ TEST(CApiTest, UpdateSegmentIndex_Without_Predicate) {
     AppendIndexParam(c_load_index_info, index_type_key.c_str(), index_type_value.c_str());
     AppendIndexParam(c_load_index_info, index_mode_key.c_str(), index_mode_value.c_str());
     AppendIndexParam(c_load_index_info, metric_type_key.c_str(), metric_type_value.c_str());
-    AppendFieldInfo(c_load_index_info, "fakevec", 100);
+    AppendFieldInfo(c_load_index_info, 100);
     AppendIndex(c_load_index_info, (CBinarySet)&binary_set);
 
     status = UpdateSegmentIndex(segment, c_load_index_info);
@@ -1074,7 +1074,7 @@ TEST(CApiTest, UpdateSegmentIndex_With_float_Predicate_Range) {
     AppendIndexParam(c_load_index_info, index_type_key.c_str(), index_type_value.c_str());
     AppendIndexParam(c_load_index_info, index_mode_key.c_str(), index_mode_value.c_str());
     AppendIndexParam(c_load_index_info, metric_type_key.c_str(), metric_type_value.c_str());
-    AppendFieldInfo(c_load_index_info, "fakevec", 100);
+    AppendFieldInfo(c_load_index_info, 100);
     AppendIndex(c_load_index_info, (CBinarySet)&binary_set);
 
     status = UpdateSegmentIndex(segment, c_load_index_info);
@@ -1211,7 +1211,7 @@ TEST(CApiTest, UpdateSegmentIndex_With_float_Predicate_Term) {
     AppendIndexParam(c_load_index_info, index_type_key.c_str(), index_type_value.c_str());
     AppendIndexParam(c_load_index_info, index_mode_key.c_str(), index_mode_value.c_str());
     AppendIndexParam(c_load_index_info, metric_type_key.c_str(), metric_type_value.c_str());
-    AppendFieldInfo(c_load_index_info, "fakevec", 100);
+    AppendFieldInfo(c_load_index_info, 100);
     AppendIndex(c_load_index_info, (CBinarySet)&binary_set);
 
     status = UpdateSegmentIndex(segment, c_load_index_info);
@@ -1350,7 +1350,7 @@ TEST(CApiTest, UpdateSegmentIndex_With_binary_Predicate_Range) {
     AppendIndexParam(c_load_index_info, index_type_key.c_str(), index_type_value.c_str());
     AppendIndexParam(c_load_index_info, index_mode_key.c_str(), index_mode_value.c_str());
     AppendIndexParam(c_load_index_info, metric_type_key.c_str(), metric_type_value.c_str());
-    AppendFieldInfo(c_load_index_info, "fakevec", 100);
+    AppendFieldInfo(c_load_index_info, 100);
     AppendIndex(c_load_index_info, (CBinarySet)&binary_set);
 
     status = UpdateSegmentIndex(segment, c_load_index_info);
@@ -1488,7 +1488,7 @@ TEST(CApiTest, UpdateSegmentIndex_With_binary_Predicate_Term) {
     AppendIndexParam(c_load_index_info, index_type_key.c_str(), index_type_value.c_str());
     AppendIndexParam(c_load_index_info, index_mode_key.c_str(), index_mode_value.c_str());
     AppendIndexParam(c_load_index_info, metric_type_key.c_str(), metric_type_value.c_str());
-    AppendFieldInfo(c_load_index_info, "fakevec", 100);
+    AppendFieldInfo(c_load_index_info, 100);
     AppendIndex(c_load_index_info, (CBinarySet)&binary_set);
 
     status = UpdateSegmentIndex(segment, c_load_index_info);
@@ -1665,7 +1665,7 @@ TEST(CApiTest, SealedSegment_search_float_Predicate_Range) {
     AppendIndexParam(c_load_index_info, index_type_key.c_str(), index_type_value.c_str());
     AppendIndexParam(c_load_index_info, index_mode_key.c_str(), index_mode_value.c_str());
     AppendIndexParam(c_load_index_info, metric_type_key.c_str(), metric_type_value.c_str());
-    AppendFieldInfo(c_load_index_info, "fakevec", 100);
+    AppendFieldInfo(c_load_index_info, 100);
     AppendIndex(c_load_index_info, (CBinarySet)&binary_set);
 
     auto load_index_info = (LoadIndexInfo*)c_load_index_info;
diff --git a/internal/core/unittest/test_sealed.cpp b/internal/core/unittest/test_sealed.cpp
index 0c4ffe5182dda4be0e2297012fc72569737fa25d..08ad60375e17f520d101274e80f85be0303c8347 100644
--- a/internal/core/unittest/test_sealed.cpp
+++ b/internal/core/unittest/test_sealed.cpp
@@ -105,7 +105,6 @@ TEST(Sealed, without_predicate) {
     auto ref_result = QueryResultToJson(qr);
 
     LoadIndexInfo load_info;
-    load_info.field_name = "fakevec";
     load_info.field_id = fake_id.get();
     load_info.index = indexing;
     load_info.index_params["metric_type"] = "L2";
@@ -198,7 +197,6 @@ TEST(Sealed, with_predicate) {
     auto result = indexing->Query(query_dataset, conf, nullptr);
 
     LoadIndexInfo load_info;
-    load_info.field_name = "fakevec";
     load_info.field_id = fake_id.get();
     load_info.index = indexing;
     load_info.index_params["metric_type"] = "L2";
@@ -312,7 +310,6 @@ TEST(Sealed, LoadFieldData) {
 
     LoadIndexInfo vec_info;
     vec_info.field_id = fakevec_id.get();
-    vec_info.field_name = "fakevec";
     vec_info.index = indexing;
     vec_info.index_params["metric_type"] = milvus::knowhere::Metric::L2;
     segment->LoadIndex(vec_info);
diff --git a/internal/distributed/masterservice/masterservice_test.go b/internal/distributed/masterservice/masterservice_test.go
index f473ea5a183fe10a70d08f61e624b286e4691185..fca7ce4d0235c857ab6bf591583dad330d81445d 100644
--- a/internal/distributed/masterservice/masterservice_test.go
+++ b/internal/distributed/masterservice/masterservice_test.go
@@ -98,7 +98,7 @@ func TestGrpcService(t *testing.T) {
 
 	var binlogLock sync.Mutex
 	binlogPathArray := make([]string, 0, 16)
-	core.BuildIndexReq = func(binlog []string, typeParams []*commonpb.KeyValuePair, indexParams []*commonpb.KeyValuePair) (typeutil.UniqueID, error) {
+	core.BuildIndexReq = func(binlog []string, typeParams []*commonpb.KeyValuePair, indexParams []*commonpb.KeyValuePair, indexID typeutil.UniqueID, indexName string) (typeutil.UniqueID, error) {
 		binlogLock.Lock()
 		defer binlogLock.Unlock()
 		binlogPathArray = append(binlogPathArray, binlog...)
diff --git a/internal/indexnode/task.go b/internal/indexnode/task.go
index 19615695eb1a2203c7293c5487f104629e679ccd..dc504c4b99d80deddefdd0e4e0ae9257f6f7b46e 100644
--- a/internal/indexnode/task.go
+++ b/internal/indexnode/task.go
@@ -247,7 +247,7 @@ func (it *IndexBuildTask) Execute() error {
 		}
 
 		var indexCodec storage.IndexCodec
-		serializedIndexBlobs, err := indexCodec.Serialize(getStorageBlobs(indexBlobs), indexParams)
+		serializedIndexBlobs, err := indexCodec.Serialize(getStorageBlobs(indexBlobs), indexParams, it.cmd.Req.IndexName, it.cmd.Req.IndexID)
 		if err != nil {
 			return err
 		}
diff --git a/internal/masterservice/master_service.go b/internal/masterservice/master_service.go
index 0b62fd1482949b5f2bf3df85443b68c4bc959dd4..e164ce7ba9e74ca3173ba43ea1e0130cc37131a8 100644
--- a/internal/masterservice/master_service.go
+++ b/internal/masterservice/master_service.go
@@ -152,7 +152,7 @@ type Core struct {
 	GetBinlogFilePathsFromDataServiceReq func(segID typeutil.UniqueID, fieldID typeutil.UniqueID) ([]string, error)
 
 	//TODO, call index builder's client to build index, return build id
-	BuildIndexReq func(binlog []string, typeParams []*commonpb.KeyValuePair, indexParams []*commonpb.KeyValuePair) (typeutil.UniqueID, error)
+	BuildIndexReq func(binlog []string, typeParams []*commonpb.KeyValuePair, indexParams []*commonpb.KeyValuePair, indexID typeutil.UniqueID, indexName string) (typeutil.UniqueID, error)
 
 	//TODO, proxy service interface, notify proxy service to drop collection
 	InvalidateCollectionMetaCache func(ts typeutil.Timestamp, dbName string, collectionName string) error
@@ -671,11 +671,13 @@ func (c *Core) SetDataService(s DataServiceInterface) error {
 }
 
 func (c *Core) SetIndexService(s IndexServiceInterface) error {
-	c.BuildIndexReq = func(binlog []string, typeParams []*commonpb.KeyValuePair, indexParams []*commonpb.KeyValuePair) (typeutil.UniqueID, error) {
+	c.BuildIndexReq = func(binlog []string, typeParams []*commonpb.KeyValuePair, indexParams []*commonpb.KeyValuePair, indexID typeutil.UniqueID, indexName string) (typeutil.UniqueID, error) {
 		rsp, err := s.BuildIndex(&indexpb.BuildIndexRequest{
 			DataPaths:   binlog,
 			TypeParams:  typeParams,
 			IndexParams: indexParams,
+			IndexID:     indexID,
+			IndexName:   indexName,
 		})
 		if err != nil {
 			return 0, err
diff --git a/internal/masterservice/task.go b/internal/masterservice/task.go
index 3586151c28945fea4641b76d88fbfd44f28f3c68..2d6648d4f1be95c79437bf95e08597c77c572c43 100644
--- a/internal/masterservice/task.go
+++ b/internal/masterservice/task.go
@@ -628,7 +628,7 @@ func (t *CreateIndexTask) BuildIndex() error {
 			})
 		}
 	}
-	bldID, err = t.core.BuildIndexReq(binlogs, t.fieldSchema.TypeParams, t.indexParams)
+	bldID, err = t.core.BuildIndexReq(binlogs, t.fieldSchema.TypeParams, t.indexParams, idxID, t.indexName)
 	if err != nil {
 		return err
 	}
diff --git a/internal/proto/internal.proto b/internal/proto/internal.proto
index f045b93bd0cfdfd486b8b008dd364a70061d94da..25ec52cb2fd3be389ba9fe5f5023b805eb80f412 100644
--- a/internal/proto/internal.proto
+++ b/internal/proto/internal.proto
@@ -116,9 +116,16 @@ message InsertRequest {
 message SearchRequest {
   common.MsgBase base = 1;
   string result_channelID = 2;
-  common.Blob query = 3;
-
+  int64 dbID = 3;
+  int64 collectionID = 4;
+  repeated int64 partitionIDs = 5;
+  string dsl = 6;
+  // serialized `PlaceholderGroup`
+  bytes placeholder_group = 7;
+  common.Blob query = 8;
 }
+
+
 message SearchResults {
   common.MsgBase base = 1;
   common.Status status = 2;
diff --git a/internal/proto/internalpb2/internal.pb.go b/internal/proto/internalpb2/internal.pb.go
index 541b1867f5eb191158de4edcfa7fbe3593327823..3e3aa5b0c3c1dbd1e28bf23da80eedb0da61a7a3 100644
--- a/internal/proto/internalpb2/internal.pb.go
+++ b/internal/proto/internalpb2/internal.pb.go
@@ -895,12 +895,18 @@ func (m *InsertRequest) GetRowData() []*commonpb.Blob {
 }
 
 type SearchRequest struct {
-	Base                 *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
-	ResultChannelID      string            `protobuf:"bytes,2,opt,name=result_channelID,json=resultChannelID,proto3" json:"result_channelID,omitempty"`
-	Query                *commonpb.Blob    `protobuf:"bytes,3,opt,name=query,proto3" json:"query,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
-	XXX_unrecognized     []byte            `json:"-"`
-	XXX_sizecache        int32             `json:"-"`
+	Base            *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
+	ResultChannelID string            `protobuf:"bytes,2,opt,name=result_channelID,json=resultChannelID,proto3" json:"result_channelID,omitempty"`
+	DbID            int64             `protobuf:"varint,3,opt,name=dbID,proto3" json:"dbID,omitempty"`
+	CollectionID    int64             `protobuf:"varint,4,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
+	PartitionIDs    []int64           `protobuf:"varint,5,rep,packed,name=partitionIDs,proto3" json:"partitionIDs,omitempty"`
+	Dsl             string            `protobuf:"bytes,6,opt,name=dsl,proto3" json:"dsl,omitempty"`
+	// serialized `PlaceholderGroup`
+	PlaceholderGroup     []byte         `protobuf:"bytes,7,opt,name=placeholder_group,json=placeholderGroup,proto3" json:"placeholder_group,omitempty"`
+	Query                *commonpb.Blob `protobuf:"bytes,8,opt,name=query,proto3" json:"query,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}       `json:"-"`
+	XXX_unrecognized     []byte         `json:"-"`
+	XXX_sizecache        int32          `json:"-"`
 }
 
 func (m *SearchRequest) Reset()         { *m = SearchRequest{} }
@@ -942,6 +948,41 @@ func (m *SearchRequest) GetResultChannelID() string {
 	return ""
 }
 
+func (m *SearchRequest) GetDbID() int64 {
+	if m != nil {
+		return m.DbID
+	}
+	return 0
+}
+
+func (m *SearchRequest) GetCollectionID() int64 {
+	if m != nil {
+		return m.CollectionID
+	}
+	return 0
+}
+
+func (m *SearchRequest) GetPartitionIDs() []int64 {
+	if m != nil {
+		return m.PartitionIDs
+	}
+	return nil
+}
+
+func (m *SearchRequest) GetDsl() string {
+	if m != nil {
+		return m.Dsl
+	}
+	return ""
+}
+
+func (m *SearchRequest) GetPlaceholderGroup() []byte {
+	if m != nil {
+		return m.PlaceholderGroup
+	}
+	return nil
+}
+
 func (m *SearchRequest) GetQuery() *commonpb.Blob {
 	if m != nil {
 		return m.Query
@@ -1729,97 +1770,100 @@ func init() {
 func init() { proto.RegisterFile("internal.proto", fileDescriptor_41f4a519b878ee3b) }
 
 var fileDescriptor_41f4a519b878ee3b = []byte{
-	// 1463 bytes of a gzipped FileDescriptorProto
+	// 1510 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0x5b, 0x6f, 0x1b, 0x45,
-	0x1b, 0xfe, 0xd6, 0x76, 0x7c, 0x78, 0xed, 0x1c, 0xba, 0x5f, 0x0f, 0xdb, 0xef, 0x0b, 0xd4, 0x5d,
-	0x4e, 0x06, 0x44, 0x52, 0xa5, 0x08, 0x21, 0x6e, 0xda, 0x24, 0xee, 0x61, 0x95, 0xc4, 0x84, 0x71,
-	0x5a, 0xa9, 0xbd, 0x59, 0x8d, 0x77, 0x27, 0xf6, 0xb4, 0x7b, 0x70, 0x77, 0xc6, 0x4d, 0xdd, 0x6b,
-	0xee, 0x10, 0x5c, 0x20, 0x71, 0xc9, 0x0d, 0x3f, 0x80, 0x9f, 0x00, 0x12, 0x57, 0x48, 0xdc, 0x23,
-	0x21, 0xf1, 0x03, 0xf8, 0x0d, 0x5c, 0xa1, 0x39, 0xec, 0xda, 0x4e, 0x9d, 0xe0, 0x1a, 0x2a, 0x84,
-	0xe0, 0xce, 0xf3, 0xcc, 0xbb, 0xef, 0xcc, 0xf3, 0xbc, 0x87, 0x99, 0x31, 0x2c, 0xd1, 0x88, 0x93,
-	0x24, 0xc2, 0xc1, 0x5a, 0x3f, 0x89, 0x79, 0x6c, 0x9e, 0x0b, 0x69, 0xf0, 0x78, 0xc0, 0xd4, 0x68,
-	0x2d, 0x9d, 0xfc, 0x5f, 0xcd, 0x8b, 0xc3, 0x30, 0x8e, 0x14, 0x6c, 0x7f, 0x63, 0xc0, 0xe2, 0x76,
-	0x1c, 0xf6, 0xe3, 0x88, 0x44, 0xdc, 0x89, 0x0e, 0x63, 0xf3, 0x3c, 0x14, 0xa3, 0xd8, 0x27, 0x4e,
-	0xd3, 0x32, 0xea, 0x46, 0x23, 0x8f, 0xf4, 0xc8, 0x34, 0xa1, 0x90, 0xc4, 0x01, 0xb1, 0x72, 0x75,
-	0xa3, 0x51, 0x41, 0xf2, 0xb7, 0x79, 0x0d, 0x80, 0x71, 0xcc, 0x89, 0xeb, 0xc5, 0x3e, 0xb1, 0xf2,
-	0x75, 0xa3, 0xb1, 0xb4, 0x51, 0x5f, 0x9b, 0xba, 0xee, 0x5a, 0x5b, 0x18, 0x6e, 0xc7, 0x3e, 0x41,
-	0x15, 0x96, 0xfe, 0x34, 0xaf, 0x03, 0x90, 0x27, 0x3c, 0xc1, 0x2e, 0x8d, 0x0e, 0x63, 0xab, 0x50,
-	0xcf, 0x37, 0xaa, 0x1b, 0x97, 0x27, 0x1d, 0xe8, 0xed, 0xee, 0x90, 0xe1, 0x5d, 0x1c, 0x0c, 0xc8,
-	0x3e, 0xa6, 0x09, 0xaa, 0xc8, 0x8f, 0xc4, 0x76, 0xed, 0x9f, 0x0c, 0x58, 0xce, 0x08, 0xc8, 0x35,
-	0x98, 0xf9, 0x01, 0x2c, 0xc8, 0x25, 0x24, 0x83, 0xea, 0xc6, 0xab, 0x27, 0xec, 0x68, 0x82, 0x37,
-	0x52, 0x9f, 0x98, 0x77, 0xe0, 0xbf, 0x6c, 0xd0, 0xf1, 0xd2, 0x29, 0x57, 0xa2, 0xcc, 0xca, 0xc9,
-	0xad, 0xcd, 0xe6, 0xc9, 0x1c, 0x77, 0xa0, 0xb7, 0x74, 0x15, 0x8a, 0xc2, 0xd3, 0x80, 0x49, 0x95,
-	0xaa, 0x1b, 0xff, 0x9f, 0x4a, 0xb2, 0x2d, 0x4d, 0x90, 0x36, 0xb5, 0xef, 0x42, 0xb9, 0x25, 0xc4,
-	0x17, 0x61, 0x79, 0x0f, 0x4a, 0xd8, 0xf7, 0x13, 0xc2, 0x98, 0x66, 0xb5, 0x3a, 0xd5, 0xc3, 0xa6,
-	0xb2, 0x41, 0xa9, 0xf1, 0xb4, 0xb0, 0xd9, 0x0f, 0x00, 0x9c, 0x88, 0xf2, 0x7d, 0x9c, 0xe0, 0x90,
-	0x9d, 0x18, 0xf0, 0x26, 0xd4, 0x18, 0xc7, 0x09, 0x77, 0xfb, 0xd2, 0x4e, 0x4b, 0x30, 0x43, 0x74,
-	0xaa, 0xf2, 0x33, 0xe5, 0xdd, 0xbe, 0x07, 0xd0, 0xe6, 0x09, 0x8d, 0xba, 0xbb, 0x94, 0x71, 0xb1,
-	0xd6, 0x63, 0x61, 0x27, 0x48, 0xe4, 0x1b, 0x15, 0xa4, 0x47, 0x63, 0xf2, 0xe4, 0x66, 0x97, 0xe7,
-	0x1a, 0x54, 0x0f, 0x68, 0x48, 0x0e, 0xa8, 0xf7, 0x70, 0x8f, 0x75, 0xcd, 0x2b, 0x50, 0xe8, 0x60,
-	0x46, 0x4e, 0x95, 0x67, 0x8f, 0x75, 0xb7, 0x30, 0x23, 0x48, 0x5a, 0xda, 0x3f, 0x1b, 0x70, 0x61,
-	0x3b, 0x21, 0x32, 0x19, 0x83, 0x80, 0x78, 0x9c, 0xc6, 0x11, 0x22, 0x8f, 0x06, 0x84, 0xf1, 0xe7,
-	0xf7, 0x66, 0x5e, 0x80, 0x92, 0xdf, 0x71, 0x23, 0x1c, 0xa6, 0x62, 0x17, 0xfd, 0x4e, 0x0b, 0x87,
-	0xc4, 0x7c, 0x1d, 0x96, 0xbc, 0xcc, 0xbf, 0x40, 0x64, 0x0e, 0x54, 0xd0, 0x31, 0x54, 0x84, 0xca,
-	0xef, 0x38, 0x4d, 0xab, 0x20, 0xc3, 0x20, 0x7f, 0x9b, 0x36, 0xd4, 0x46, 0x56, 0x4e, 0xd3, 0x5a,
-	0x90, 0x73, 0x13, 0x98, 0x10, 0x95, 0x79, 0x3d, 0x12, 0x62, 0xab, 0x58, 0x37, 0x1a, 0x35, 0xa4,
-	0x47, 0xf6, 0x77, 0x06, 0x9c, 0x6b, 0x26, 0x71, 0xff, 0xef, 0x4c, 0xce, 0xfe, 0x34, 0x07, 0xe7,
-	0x55, 0x8c, 0xf6, 0x71, 0xc2, 0xe9, 0x0b, 0x62, 0xf1, 0x06, 0x2c, 0x8f, 0x56, 0x55, 0x06, 0xd3,
-	0x69, 0xbc, 0x06, 0x4b, 0xfd, 0x74, 0x1f, 0xca, 0xae, 0x20, 0xed, 0x16, 0x33, 0x74, 0x82, 0xed,
-	0xc2, 0x29, 0x6c, 0x8b, 0x53, 0x42, 0x59, 0x87, 0x6a, 0xe6, 0xc8, 0x69, 0x5a, 0x25, 0x69, 0x32,
-	0x0e, 0xd9, 0x9f, 0xe4, 0xe0, 0xac, 0x08, 0xea, 0xbf, 0x6a, 0x08, 0x35, 0xbe, 0xcd, 0x81, 0xa9,
-	0xb2, 0xc3, 0x89, 0x7c, 0xf2, 0xe4, 0xaf, 0xd4, 0xe2, 0x25, 0x80, 0x43, 0x4a, 0x02, 0x7f, 0x5c,
-	0x87, 0x8a, 0x44, 0xfe, 0x90, 0x06, 0x16, 0x94, 0xa4, 0x93, 0x8c, 0x7f, 0x3a, 0x14, 0xfd, 0x59,
-	0x9d, 0x9d, 0xba, 0x3f, 0x97, 0x67, 0xee, 0xcf, 0xf2, 0x33, 0xdd, 0x9f, 0xbf, 0xce, 0xc3, 0xa2,
-	0x13, 0x31, 0x92, 0xf0, 0x7f, 0x72, 0x22, 0x99, 0xab, 0x50, 0x61, 0xa4, 0x1b, 0x8a, 0x23, 0xbc,
-	0x69, 0x95, 0xe5, 0xfc, 0x08, 0x10, 0xb3, 0x5e, 0x0f, 0x47, 0x11, 0x09, 0x9c, 0xa6, 0x55, 0x51,
-	0xa1, 0xcd, 0x00, 0xf3, 0x65, 0x00, 0x4e, 0x43, 0xc2, 0x38, 0x0e, 0xfb, 0xcc, 0x82, 0x7a, 0xbe,
-	0x51, 0x40, 0x63, 0x88, 0xe8, 0xcf, 0x49, 0x7c, 0xe4, 0x34, 0x99, 0x55, 0xad, 0xe7, 0xc5, 0x01,
-	0xab, 0x46, 0xe6, 0xbb, 0x50, 0x4e, 0xe2, 0x23, 0xd7, 0xc7, 0x1c, 0x5b, 0x35, 0x19, 0xbc, 0x8b,
-	0x53, 0xc5, 0xde, 0x0a, 0xe2, 0x0e, 0x2a, 0x25, 0xf1, 0x51, 0x13, 0x73, 0x6c, 0x7f, 0x69, 0xc0,
-	0x62, 0x9b, 0xe0, 0xc4, 0xeb, 0xcd, 0x1f, 0xb0, 0x37, 0x61, 0x25, 0x21, 0x6c, 0x10, 0x70, 0x77,
-	0x44, 0x4b, 0x45, 0x6e, 0x59, 0xe1, 0xdb, 0x19, 0xb9, 0x75, 0x58, 0x78, 0x34, 0x20, 0xc9, 0x50,
-	0xdf, 0x5b, 0x4e, 0xd9, 0xa1, 0xb2, 0xb3, 0x7f, 0x1c, 0xdb, 0x9f, 0x70, 0xc5, 0xe6, 0xd8, 0xdf,
-	0x3c, 0xd7, 0x81, 0xa9, 0xa4, 0xf2, 0xd3, 0x49, 0x5d, 0x82, 0x6a, 0x48, 0x78, 0x42, 0x3d, 0x97,
-	0x0f, 0xfb, 0x69, 0xae, 0x81, 0x82, 0x0e, 0x86, 0x7d, 0x99, 0x68, 0x3d, 0xca, 0x99, 0xb5, 0x50,
-	0xcf, 0x37, 0x6a, 0x48, 0xfe, 0xb6, 0x7f, 0x30, 0x60, 0xb1, 0x49, 0x02, 0xc2, 0xc9, 0xfc, 0xc2,
-	0x4f, 0x29, 0x88, 0xdc, 0xd4, 0x82, 0x98, 0xc8, 0xb8, 0xfc, 0xe9, 0x19, 0x57, 0x78, 0x26, 0xe3,
-	0x2e, 0x43, 0xad, 0x9f, 0xd0, 0x10, 0x27, 0x43, 0xf7, 0x21, 0x19, 0x2a, 0x1a, 0x22, 0xe1, 0x15,
-	0xb6, 0x43, 0x86, 0xcc, 0xfe, 0xca, 0x80, 0xf2, 0xcd, 0x60, 0xc0, 0x7a, 0x73, 0x5d, 0x9d, 0x26,
-	0xeb, 0x25, 0x77, 0xbc, 0x5e, 0x8e, 0xd7, 0x64, 0x7e, 0x4a, 0x4d, 0xda, 0x50, 0xcb, 0x0a, 0xf0,
-	0x00, 0x77, 0x75, 0x10, 0x26, 0x30, 0xfb, 0x57, 0x03, 0x2a, 0xbb, 0x31, 0xf6, 0x65, 0x73, 0xff,
-	0xd3, 0x77, 0xb9, 0x0a, 0xa3, 0xfe, 0x9c, 0x6a, 0x3c, 0x6a, 0xd8, 0x63, 0x8d, 0xb7, 0x30, 0xd9,
-	0x78, 0x2f, 0x41, 0x95, 0x8a, 0x0d, 0xb9, 0x7d, 0xcc, 0x7b, 0x4a, 0xdc, 0x0a, 0x02, 0x09, 0xed,
-	0x0b, 0x44, 0x74, 0xe6, 0xd4, 0x40, 0x76, 0xe6, 0xe2, 0xcc, 0x9d, 0x59, 0x3b, 0x91, 0x9d, 0xf9,
-	0x97, 0x1c, 0x58, 0x6d, 0xb5, 0x59, 0x91, 0xe9, 0x94, 0x71, 0xea, 0xb1, 0x3b, 0x7d, 0x5f, 0xbe,
-	0x27, 0x56, 0xa1, 0xd2, 0xce, 0x98, 0xa9, 0x7b, 0xfb, 0x08, 0x10, 0xf9, 0xb1, 0x47, 0xc2, 0x38,
-	0x19, 0xb6, 0xe9, 0x53, 0xa2, 0x89, 0x8f, 0x21, 0x82, 0x5b, 0x6b, 0x10, 0xa2, 0xf8, 0x88, 0xe9,
-	0xd0, 0xa4, 0x43, 0xc1, 0xcd, 0x93, 0xe7, 0xa9, 0x2b, 0xd2, 0x49, 0x32, 0x2f, 0x20, 0x50, 0x90,
-	0xb8, 0x6c, 0x9b, 0x17, 0xa1, 0x4c, 0x22, 0x5f, 0xcd, 0x2e, 0xc8, 0xd9, 0x12, 0x89, 0x7c, 0x39,
-	0xb5, 0x03, 0xcb, 0xfa, 0xc1, 0x10, 0x33, 0x19, 0xc2, 0x94, 0xb9, 0x7d, 0xc2, 0xb3, 0x69, 0x8f,
-	0x75, 0xf7, 0xb5, 0x29, 0x5a, 0x52, 0x8f, 0x86, 0xf4, 0x4b, 0xf3, 0x16, 0x2c, 0x8a, 0x75, 0x46,
-	0xae, 0x4a, 0x33, 0xbb, 0xaa, 0x91, 0xc8, 0x1f, 0x39, 0xb2, 0xa1, 0x46, 0x59, 0x8b, 0x1c, 0x69,
-	0x75, 0x64, 0x73, 0x2f, 0xa3, 0x09, 0xcc, 0xfe, 0xdc, 0x80, 0x33, 0xcf, 0x48, 0x3d, 0x47, 0xbe,
-	0xed, 0x40, 0xb9, 0x4d, 0xba, 0xc2, 0x45, 0xfa, 0x5c, 0x5a, 0x3f, 0xe9, 0x35, 0x7c, 0x42, 0x60,
-	0x51, 0xe6, 0xc0, 0x7e, 0x90, 0x85, 0x5f, 0xd6, 0xa9, 0x78, 0x63, 0x8a, 0xe6, 0xe3, 0xbf, 0x80,
-	0x82, 0xb5, 0x3f, 0x36, 0xc4, 0x93, 0xd0, 0x27, 0x4f, 0xe4, 0xd2, 0xcf, 0x24, 0xb0, 0x31, 0x4f,
-	0x02, 0x9b, 0x57, 0xe0, 0x6c, 0x34, 0x08, 0xdd, 0x84, 0x04, 0x98, 0x13, 0xdf, 0xd5, 0xab, 0x31,
-	0xbd, 0xba, 0x19, 0x0d, 0x42, 0xa4, 0xa6, 0x34, 0x4d, 0x66, 0x7f, 0x66, 0x00, 0xdc, 0x14, 0x55,
-	0xa6, 0xb6, 0x71, 0xbc, 0x8d, 0x18, 0xa7, 0xdf, 0x8f, 0x72, 0x93, 0x65, 0xba, 0x95, 0x96, 0x29,
-	0x93, 0xf1, 0xc8, 0x4f, 0xe3, 0x90, 0xc5, 0x63, 0x44, 0x5e, 0x57, 0xb2, 0x8a, 0xc1, 0x17, 0x06,
-	0xd4, 0xc6, 0x42, 0xc5, 0x26, 0x65, 0x34, 0x8e, 0x77, 0x14, 0x79, 0xae, 0x88, 0x2a, 0x73, 0xd9,
-	0x58, 0xe1, 0x85, 0xa3, 0xc2, 0xbb, 0x08, 0x65, 0x29, 0xc9, 0x58, 0xe5, 0x45, 0xba, 0xf2, 0xde,
-	0x86, 0x33, 0x09, 0xf1, 0x48, 0xc4, 0x83, 0xa1, 0x1b, 0xc6, 0x3e, 0x3d, 0xa4, 0xc4, 0x97, 0xf5,
-	0x57, 0x46, 0x2b, 0xe9, 0xc4, 0x9e, 0xc6, 0xed, 0xef, 0x0d, 0x58, 0xfa, 0x48, 0x1c, 0xb7, 0xad,
-	0xd8, 0x27, 0x6a, 0x67, 0xcf, 0x9f, 0x12, 0xd7, 0x25, 0x17, 0x2d, 0x8f, 0x4a, 0xd7, 0x57, 0x7e,
-	0x3f, 0x5d, 0x19, 0x2a, 0x33, 0x9d, 0xa2, 0x42, 0x62, 0x75, 0xe7, 0x9d, 0x45, 0xe2, 0x51, 0x60,
-	0x91, 0xba, 0x29, 0x2b, 0x89, 0x7d, 0xa8, 0x8e, 0x15, 0xaf, 0x38, 0xba, 0xf4, 0x39, 0xa7, 0x8e,
-	0x47, 0x43, 0xf6, 0xe5, 0xaa, 0xc6, 0x64, 0x67, 0x3e, 0x0b, 0x0b, 0x21, 0xeb, 0x66, 0x57, 0x16,
-	0x35, 0x10, 0x91, 0xc9, 0x4e, 0x40, 0xa9, 0x6d, 0x01, 0x8d, 0x80, 0xb7, 0xde, 0x87, 0x4a, 0xf6,
-	0x07, 0x94, 0xb9, 0x02, 0x35, 0xa7, 0xe5, 0x1c, 0x38, 0x9b, 0xbb, 0xce, 0x7d, 0xa7, 0x75, 0x6b,
-	0xe5, 0x3f, 0x66, 0x15, 0x4a, 0xb7, 0x6f, 0x6c, 0xee, 0x1e, 0xdc, 0xbe, 0xb7, 0x62, 0x98, 0x35,
-	0x28, 0x6f, 0x6e, 0xb5, 0x3e, 0x44, 0x7b, 0x9b, 0xbb, 0x2b, 0xb9, 0xad, 0x1b, 0xf7, 0xb7, 0xbb,
-	0x94, 0xf7, 0x06, 0x1d, 0x21, 0xe2, 0xfa, 0x53, 0x1a, 0x04, 0xf4, 0x29, 0x27, 0x5e, 0x6f, 0x5d,
-	0xb1, 0x7c, 0xc7, 0xa7, 0x8c, 0x27, 0xb4, 0x33, 0xe0, 0xc4, 0x5f, 0x4f, 0xb9, 0xae, 0x4b, 0xea,
-	0xd9, 0xb0, 0xdf, 0xd9, 0xe8, 0x14, 0x25, 0x74, 0xf5, 0xb7, 0x00, 0x00, 0x00, 0xff, 0xff, 0x84,
-	0x0d, 0x31, 0xda, 0xa6, 0x13, 0x00, 0x00,
+	0x14, 0x66, 0x6d, 0x27, 0xb6, 0x8f, 0x9d, 0xc4, 0x5d, 0x7a, 0xd9, 0x42, 0xa0, 0xee, 0x72, 0x0b,
+	0x54, 0x24, 0x55, 0x8a, 0x10, 0xe2, 0xa5, 0x4d, 0xe2, 0x5e, 0x56, 0x49, 0x4c, 0x18, 0xa7, 0x95,
+	0xda, 0x97, 0xd5, 0x7a, 0x77, 0x62, 0x4f, 0xbb, 0x17, 0x77, 0x66, 0xdc, 0xd4, 0x7d, 0xe6, 0x0d,
+	0xc1, 0x03, 0x12, 0x7f, 0x80, 0x1f, 0xc0, 0x33, 0x4f, 0x20, 0xf1, 0x84, 0xc4, 0x3b, 0x12, 0x12,
+	0x3f, 0x80, 0xdf, 0xc0, 0x13, 0x9a, 0xcb, 0xee, 0xda, 0xa9, 0x93, 0xa6, 0x81, 0x0a, 0x21, 0x78,
+	0xf3, 0x9c, 0x39, 0x7b, 0x66, 0xbe, 0xef, 0x3b, 0x67, 0xce, 0x8c, 0x61, 0x9e, 0xc4, 0x1c, 0xd3,
+	0xd8, 0x0b, 0x97, 0x07, 0x34, 0xe1, 0x89, 0x79, 0x26, 0x22, 0xe1, 0xa3, 0x21, 0x53, 0xa3, 0xe5,
+	0x74, 0xf2, 0x95, 0xba, 0x9f, 0x44, 0x51, 0x12, 0x2b, 0xb3, 0xfd, 0xbd, 0x01, 0x73, 0x1b, 0x49,
+	0x34, 0x48, 0x62, 0x1c, 0x73, 0x27, 0xde, 0x4b, 0xcc, 0xb3, 0x30, 0x1b, 0x27, 0x01, 0x76, 0x5a,
+	0x96, 0xd1, 0x34, 0x96, 0x8a, 0x48, 0x8f, 0x4c, 0x13, 0x4a, 0x34, 0x09, 0xb1, 0x55, 0x68, 0x1a,
+	0x4b, 0x55, 0x24, 0x7f, 0x9b, 0x57, 0x01, 0x18, 0xf7, 0x38, 0x76, 0xfd, 0x24, 0xc0, 0x56, 0xb1,
+	0x69, 0x2c, 0xcd, 0xaf, 0x36, 0x97, 0xa7, 0xae, 0xbb, 0xdc, 0x11, 0x8e, 0x1b, 0x49, 0x80, 0x51,
+	0x95, 0xa5, 0x3f, 0xcd, 0x6b, 0x00, 0xf8, 0x31, 0xa7, 0x9e, 0x4b, 0xe2, 0xbd, 0xc4, 0x2a, 0x35,
+	0x8b, 0x4b, 0xb5, 0xd5, 0x8b, 0x93, 0x01, 0xf4, 0x76, 0x37, 0xf1, 0xe8, 0x8e, 0x17, 0x0e, 0xf1,
+	0x8e, 0x47, 0x28, 0xaa, 0xca, 0x8f, 0xc4, 0x76, 0xed, 0x5f, 0x0d, 0x58, 0xc8, 0x00, 0xc8, 0x35,
+	0x98, 0xf9, 0x31, 0xcc, 0xc8, 0x25, 0x24, 0x82, 0xda, 0xea, 0x9b, 0x87, 0xec, 0x68, 0x02, 0x37,
+	0x52, 0x9f, 0x98, 0xb7, 0xe1, 0x65, 0x36, 0xec, 0xfa, 0xe9, 0x94, 0x2b, 0xad, 0xcc, 0x2a, 0xc8,
+	0xad, 0x1d, 0x2f, 0x92, 0x39, 0x1e, 0x40, 0x6f, 0xe9, 0x0a, 0xcc, 0x8a, 0x48, 0x43, 0x26, 0x59,
+	0xaa, 0xad, 0xbe, 0x3a, 0x15, 0x64, 0x47, 0xba, 0x20, 0xed, 0x6a, 0xdf, 0x81, 0x4a, 0x5b, 0x90,
+	0x2f, 0x64, 0xf9, 0x10, 0xca, 0x5e, 0x10, 0x50, 0xcc, 0x98, 0x46, 0xb5, 0x38, 0x35, 0xc2, 0x9a,
+	0xf2, 0x41, 0xa9, 0xf3, 0x34, 0xd9, 0xec, 0xfb, 0x00, 0x4e, 0x4c, 0xf8, 0x8e, 0x47, 0xbd, 0x88,
+	0x1d, 0x2a, 0x78, 0x0b, 0xea, 0x8c, 0x7b, 0x94, 0xbb, 0x03, 0xe9, 0xa7, 0x29, 0x38, 0x86, 0x3a,
+	0x35, 0xf9, 0x99, 0x8a, 0x6e, 0xdf, 0x05, 0xe8, 0x70, 0x4a, 0xe2, 0xde, 0x16, 0x61, 0x5c, 0xac,
+	0xf5, 0x48, 0xf8, 0x09, 0x10, 0xc5, 0xa5, 0x2a, 0xd2, 0xa3, 0x31, 0x7a, 0x0a, 0xc7, 0xa7, 0xe7,
+	0x2a, 0xd4, 0x76, 0x49, 0x84, 0x77, 0x89, 0xff, 0x60, 0x9b, 0xf5, 0xcc, 0xcb, 0x50, 0xea, 0x7a,
+	0x0c, 0x1f, 0x49, 0xcf, 0x36, 0xeb, 0xad, 0x7b, 0x0c, 0x23, 0xe9, 0x69, 0xff, 0x66, 0xc0, 0xb9,
+	0x0d, 0x8a, 0x65, 0x32, 0x86, 0x21, 0xf6, 0x39, 0x49, 0x62, 0x84, 0x1f, 0x0e, 0x31, 0xe3, 0xcf,
+	0x1f, 0xcd, 0x3c, 0x07, 0xe5, 0xa0, 0xeb, 0xc6, 0x5e, 0x94, 0x92, 0x3d, 0x1b, 0x74, 0xdb, 0x5e,
+	0x84, 0xcd, 0xb7, 0x61, 0xde, 0xcf, 0xe2, 0x0b, 0x8b, 0xcc, 0x81, 0x2a, 0x3a, 0x60, 0x15, 0x52,
+	0x05, 0x5d, 0xa7, 0x65, 0x95, 0xa4, 0x0c, 0xf2, 0xb7, 0x69, 0x43, 0x3d, 0xf7, 0x72, 0x5a, 0xd6,
+	0x8c, 0x9c, 0x9b, 0xb0, 0x09, 0x52, 0x99, 0xdf, 0xc7, 0x91, 0x67, 0xcd, 0x36, 0x8d, 0xa5, 0x3a,
+	0xd2, 0x23, 0xfb, 0x47, 0x03, 0xce, 0xb4, 0x68, 0x32, 0xf8, 0x37, 0x83, 0xb3, 0xbf, 0x28, 0xc0,
+	0x59, 0xa5, 0xd1, 0x8e, 0x47, 0x39, 0x79, 0x41, 0x28, 0xde, 0x81, 0x85, 0x7c, 0x55, 0xe5, 0x30,
+	0x1d, 0xc6, 0x5b, 0x30, 0x3f, 0x48, 0xf7, 0xa1, 0xfc, 0x4a, 0xd2, 0x6f, 0x2e, 0xb3, 0x4e, 0xa0,
+	0x9d, 0x39, 0x02, 0xed, 0xec, 0x14, 0x29, 0x9b, 0x50, 0xcb, 0x02, 0x39, 0x2d, 0xab, 0x2c, 0x5d,
+	0xc6, 0x4d, 0xf6, 0xe7, 0x05, 0x38, 0x2d, 0x44, 0xfd, 0x9f, 0x0d, 0xc1, 0xc6, 0x0f, 0x05, 0x30,
+	0x55, 0x76, 0x38, 0x71, 0x80, 0x1f, 0xff, 0x93, 0x5c, 0xbc, 0x06, 0xb0, 0x47, 0x70, 0x18, 0x8c,
+	0xf3, 0x50, 0x95, 0x96, 0xbf, 0xc4, 0x81, 0x05, 0x65, 0x19, 0x24, 0xc3, 0x9f, 0x0e, 0xc5, 0xf9,
+	0xac, 0x7a, 0xa7, 0x3e, 0x9f, 0x2b, 0xc7, 0x3e, 0x9f, 0xe5, 0x67, 0xfa, 0x7c, 0xfe, 0xb6, 0x08,
+	0x73, 0x4e, 0xcc, 0x30, 0xe5, 0xff, 0xe5, 0x44, 0x32, 0x17, 0xa1, 0xca, 0x70, 0x2f, 0x12, 0x2d,
+	0xbc, 0x65, 0x55, 0xe4, 0x7c, 0x6e, 0x10, 0xb3, 0x7e, 0xdf, 0x8b, 0x63, 0x1c, 0x3a, 0x2d, 0xab,
+	0xaa, 0xa4, 0xcd, 0x0c, 0xe6, 0xeb, 0x00, 0x9c, 0x44, 0x98, 0x71, 0x2f, 0x1a, 0x30, 0x0b, 0x9a,
+	0xc5, 0xa5, 0x12, 0x1a, 0xb3, 0x88, 0xf3, 0x99, 0x26, 0xfb, 0x4e, 0x8b, 0x59, 0xb5, 0x66, 0x51,
+	0x34, 0x58, 0x35, 0x32, 0x3f, 0x80, 0x0a, 0x4d, 0xf6, 0xdd, 0xc0, 0xe3, 0x9e, 0x55, 0x97, 0xe2,
+	0x9d, 0x9f, 0x4a, 0xf6, 0x7a, 0x98, 0x74, 0x51, 0x99, 0x26, 0xfb, 0x2d, 0x8f, 0x7b, 0xf6, 0x77,
+	0x05, 0x98, 0xeb, 0x60, 0x8f, 0xfa, 0xfd, 0x93, 0x0b, 0xf6, 0x2e, 0x34, 0x28, 0x66, 0xc3, 0x90,
+	0xbb, 0x39, 0x2c, 0xa5, 0xdc, 0x82, 0xb2, 0x6f, 0x64, 0xe0, 0x52, 0xca, 0x8b, 0x47, 0x50, 0x5e,
+	0x9a, 0x42, 0xb9, 0x0d, 0xf5, 0x31, 0x7e, 0x99, 0x35, 0x23, 0xa1, 0x4f, 0xd8, 0xcc, 0x06, 0x14,
+	0x03, 0x16, 0x4a, 0xc5, 0xaa, 0x48, 0xfc, 0x34, 0x2f, 0xc1, 0xa9, 0x41, 0xe8, 0xf9, 0xb8, 0x9f,
+	0x84, 0x01, 0xa6, 0x6e, 0x8f, 0x26, 0xc3, 0x81, 0x94, 0xab, 0x8e, 0x1a, 0x63, 0x13, 0x37, 0x85,
+	0xdd, 0x5c, 0x81, 0x99, 0x87, 0x43, 0x4c, 0x47, 0x52, 0xaf, 0x23, 0xc9, 0x53, 0x7e, 0xf6, 0x2f,
+	0x46, 0x4e, 0x9d, 0x40, 0xc9, 0x4e, 0x40, 0xdd, 0x49, 0x6e, 0x2a, 0x53, 0xf9, 0x2e, 0x4e, 0xe7,
+	0xfb, 0x02, 0xd4, 0x22, 0xcc, 0x29, 0xf1, 0x5d, 0x3e, 0x1a, 0xa4, 0x65, 0x00, 0xca, 0xb4, 0x3b,
+	0x1a, 0xc8, 0x1a, 0xe8, 0x13, 0xae, 0x08, 0xad, 0x23, 0xf9, 0xdb, 0xfe, 0xd9, 0x80, 0xb9, 0x16,
+	0x0e, 0x31, 0xc7, 0x27, 0xcf, 0x89, 0x29, 0xb5, 0x5a, 0x98, 0x5a, 0xab, 0x13, 0xc5, 0x50, 0x3c,
+	0xba, 0x18, 0x4a, 0x4f, 0x15, 0xc3, 0x45, 0xa8, 0x0f, 0x28, 0x89, 0x3c, 0x3a, 0x72, 0x1f, 0xe0,
+	0x51, 0x9a, 0x17, 0x35, 0x6d, 0xdb, 0xc4, 0x23, 0x66, 0x7f, 0x63, 0x40, 0xe5, 0x46, 0x38, 0x64,
+	0xfd, 0x13, 0xdd, 0xea, 0x26, 0x4b, 0xb9, 0x70, 0xb0, 0x94, 0x0f, 0xe6, 0x6e, 0xf1, 0x19, 0xb9,
+	0xbb, 0xeb, 0xf5, 0xb4, 0x08, 0x13, 0x36, 0xfb, 0x0f, 0x03, 0xaa, 0x5b, 0x89, 0x17, 0xc8, 0xbe,
+	0xf3, 0xb7, 0xef, 0x72, 0x11, 0xf2, 0xd6, 0x91, 0x72, 0x9c, 0xf7, 0x92, 0xb1, 0x9e, 0x50, 0x9a,
+	0xec, 0x09, 0x17, 0xa0, 0x46, 0xc4, 0x86, 0xdc, 0x81, 0xc7, 0xfb, 0x8a, 0xdc, 0x2a, 0x02, 0x69,
+	0xda, 0x11, 0x16, 0xd1, 0x34, 0x52, 0x07, 0xd9, 0x34, 0x66, 0x8f, 0xdd, 0x34, 0x74, 0x10, 0xd9,
+	0x34, 0x7e, 0x2f, 0x80, 0xd5, 0x51, 0x9b, 0x15, 0x99, 0x4e, 0x18, 0x27, 0x3e, 0xbb, 0x3d, 0x08,
+	0xe4, 0x53, 0x67, 0x11, 0xaa, 0x9d, 0x0c, 0x99, 0x7a, 0x52, 0xe4, 0x06, 0x91, 0x1f, 0xdb, 0x38,
+	0x4a, 0xe8, 0xa8, 0x43, 0x9e, 0x60, 0x0d, 0x7c, 0xcc, 0x22, 0xb0, 0xb5, 0x87, 0x11, 0x4a, 0xf6,
+	0x99, 0x96, 0x26, 0x1d, 0x0a, 0x6c, 0xbe, 0x6c, 0xf5, 0xae, 0x48, 0x27, 0x89, 0xbc, 0x84, 0x40,
+	0x99, 0xc4, 0x3b, 0xc0, 0x3c, 0x0f, 0x15, 0x1c, 0x07, 0x6a, 0x76, 0x46, 0xce, 0x96, 0x71, 0x1c,
+	0xc8, 0xa9, 0x4d, 0x58, 0xd0, 0x6f, 0x99, 0x84, 0x49, 0x09, 0x53, 0xe4, 0xf6, 0x21, 0x2f, 0xba,
+	0x6d, 0xd6, 0xdb, 0xd1, 0xae, 0x68, 0x5e, 0xbd, 0x67, 0xd2, 0x2f, 0xcd, 0x9b, 0x30, 0x27, 0xd6,
+	0xc9, 0x43, 0x95, 0x8f, 0x1d, 0xaa, 0x8e, 0xe3, 0x20, 0x0f, 0x64, 0x43, 0x9d, 0xb0, 0x36, 0xde,
+	0xd7, 0xec, 0xc8, 0x73, 0xac, 0x82, 0x26, 0x6c, 0xf6, 0x57, 0x06, 0x9c, 0x7a, 0x8a, 0xea, 0x13,
+	0xe4, 0xdb, 0x26, 0x54, 0x3a, 0xb8, 0x27, 0x42, 0xa4, 0x2f, 0xb9, 0x95, 0xc3, 0x1e, 0xea, 0x87,
+	0x08, 0x8b, 0xb2, 0x00, 0xf6, 0xfd, 0x4c, 0x7e, 0x59, 0xa7, 0xe2, 0xf9, 0x2b, 0x0e, 0x9f, 0xe0,
+	0x05, 0x14, 0xac, 0xfd, 0x99, 0x21, 0x5e, 0xab, 0x01, 0x7e, 0x2c, 0x97, 0x7e, 0x2a, 0x81, 0x8d,
+	0x93, 0x24, 0xb0, 0x79, 0x19, 0x4e, 0xc7, 0xc3, 0xc8, 0xa5, 0x38, 0xf4, 0x38, 0x0e, 0x5c, 0xbd,
+	0x1a, 0xd3, 0xab, 0x9b, 0xf1, 0x30, 0x42, 0x6a, 0x4a, 0xc3, 0x64, 0xf6, 0x97, 0x06, 0xc0, 0x0d,
+	0x51, 0x65, 0x6a, 0x1b, 0x07, 0x8f, 0x11, 0xe3, 0xe8, 0xab, 0x5b, 0x61, 0xb2, 0x4c, 0xd7, 0xd3,
+	0x32, 0x65, 0x52, 0x8f, 0xe2, 0x34, 0x0c, 0x99, 0x1e, 0x39, 0x78, 0x5d, 0xc9, 0x4a, 0x83, 0xaf,
+	0x0d, 0xa8, 0x8f, 0x49, 0xc5, 0x26, 0x69, 0x34, 0x0e, 0x9e, 0x28, 0xb2, 0xaf, 0x88, 0x2a, 0x73,
+	0xd9, 0x58, 0xe1, 0x45, 0x79, 0xe1, 0x9d, 0x87, 0x8a, 0xa4, 0x64, 0xac, 0xf2, 0x62, 0x5d, 0x79,
+	0x97, 0xe0, 0x14, 0xc5, 0x3e, 0x8e, 0x79, 0x38, 0x72, 0xa3, 0x24, 0x20, 0x7b, 0x04, 0x07, 0xb2,
+	0xfe, 0x2a, 0xa8, 0x91, 0x4e, 0x6c, 0x6b, 0xbb, 0xfd, 0x93, 0x01, 0xf3, 0x9f, 0x8a, 0x76, 0xdb,
+	0x4e, 0x02, 0xac, 0x76, 0xf6, 0xfc, 0x29, 0x71, 0x4d, 0x62, 0xd1, 0xf4, 0xa8, 0x74, 0x7d, 0xe3,
+	0xd9, 0xe9, 0xca, 0x50, 0x85, 0xe9, 0x14, 0x15, 0x14, 0xab, 0xeb, 0xf8, 0x71, 0x28, 0xce, 0x85,
+	0x45, 0xea, 0x12, 0xaf, 0x28, 0x0e, 0xa0, 0x36, 0x56, 0xbc, 0xa2, 0x75, 0xe9, 0x3e, 0xa7, 0xda,
+	0xa3, 0x21, 0xcf, 0xe5, 0x9a, 0xb6, 0xc9, 0x93, 0xf9, 0x34, 0xcc, 0x44, 0xac, 0x97, 0xdd, 0xa6,
+	0xd4, 0x40, 0x28, 0x93, 0x75, 0x40, 0xc9, 0x6d, 0x09, 0xe5, 0x86, 0xf7, 0x3e, 0x82, 0x6a, 0xf6,
+	0xdf, 0x98, 0xd9, 0x80, 0xba, 0xd3, 0x76, 0x76, 0x9d, 0xb5, 0x2d, 0xe7, 0x9e, 0xd3, 0xbe, 0xd9,
+	0x78, 0xc9, 0xac, 0x41, 0xf9, 0xd6, 0xf5, 0xb5, 0xad, 0xdd, 0x5b, 0x77, 0x1b, 0x86, 0x59, 0x87,
+	0xca, 0xda, 0x7a, 0xfb, 0x13, 0xb4, 0xbd, 0xb6, 0xd5, 0x28, 0xac, 0x5f, 0xbf, 0xb7, 0xd1, 0x23,
+	0xbc, 0x3f, 0xec, 0x0a, 0x12, 0x57, 0x9e, 0x90, 0x30, 0x24, 0x4f, 0x38, 0xf6, 0xfb, 0x2b, 0x0a,
+	0xe5, 0xfb, 0x01, 0x61, 0x9c, 0x92, 0xee, 0x90, 0xe3, 0x60, 0x25, 0xc5, 0xba, 0x22, 0xa1, 0x67,
+	0xc3, 0x41, 0x77, 0xb5, 0x3b, 0x2b, 0x4d, 0x57, 0xfe, 0x0c, 0x00, 0x00, 0xff, 0xff, 0xac, 0xb7,
+	0x6c, 0x03, 0x41, 0x14, 0x00, 0x00,
 }
diff --git a/internal/querynode/collection.go b/internal/querynode/collection.go
index 43e08119b71c5abec88c5ce6aa7130d488f744bd..c42c1a66a0770441cffd362d65a067dfc27e8e5d 100644
--- a/internal/querynode/collection.go
+++ b/internal/querynode/collection.go
@@ -23,9 +23,9 @@ type Collection struct {
 	partitions    []*Partition
 }
 
-func (c *Collection) Name() string {
-	return c.schema.Name
-}
+//func (c *Collection) Name() string {
+//	return c.schema.Name
+//}
 
 func (c *Collection) ID() UniqueID {
 	return c.id
@@ -43,9 +43,6 @@ func newCollection(collectionID UniqueID, schema *schemapb.CollectionSchema) *Co
 	/*
 		CCollection
 		NewCollection(const char* schema_proto_blob);
-
-		const char*
-		GetCollectionName(CCollection collection);
 	*/
 	schemaBlob := proto.MarshalTextString(schema)
 
diff --git a/internal/querynode/collection_replica.go b/internal/querynode/collection_replica.go
index 901ce5db57c395932ee75833b711aa2b6a604293..da369b813f2b56070ebf3d327f1a21b397180d99 100644
--- a/internal/querynode/collection_replica.go
+++ b/internal/querynode/collection_replica.go
@@ -39,9 +39,8 @@ type collectionReplica interface {
 	addCollection(collectionID UniqueID, schema *schemapb.CollectionSchema) error
 	removeCollection(collectionID UniqueID) error
 	getCollectionByID(collectionID UniqueID) (*Collection, error)
-	getCollectionByName(collectionName string) (*Collection, error)
 	hasCollection(collectionID UniqueID) bool
-	getVecFieldsByCollectionID(collectionID UniqueID) (map[int64]string, error)
+	getVecFieldsByCollectionID(collectionID UniqueID) ([]int64, error)
 
 	// partition
 	// Partition tags in different collections are not unique,
@@ -150,19 +149,6 @@ func (colReplica *collectionReplicaImpl) getCollectionByIDPrivate(collectionID U
 	return nil, errors.New("cannot find collection, id = " + strconv.FormatInt(collectionID, 10))
 }
 
-func (colReplica *collectionReplicaImpl) getCollectionByName(collectionName string) (*Collection, error) {
-	colReplica.mu.RLock()
-	defer colReplica.mu.RUnlock()
-
-	for _, collection := range colReplica.collections {
-		if collection.Name() == collectionName {
-			return collection, nil
-		}
-	}
-
-	return nil, errors.New("Cannot found collection: " + collectionName)
-}
-
 func (colReplica *collectionReplicaImpl) hasCollection(collectionID UniqueID) bool {
 	colReplica.mu.RLock()
 	defer colReplica.mu.RUnlock()
@@ -175,7 +161,7 @@ func (colReplica *collectionReplicaImpl) hasCollection(collectionID UniqueID) bo
 	return false
 }
 
-func (colReplica *collectionReplicaImpl) getVecFieldsByCollectionID(collectionID UniqueID) (map[int64]string, error) {
+func (colReplica *collectionReplicaImpl) getVecFieldsByCollectionID(collectionID UniqueID) ([]int64, error) {
 	colReplica.mu.RLock()
 	defer colReplica.mu.RUnlock()
 
@@ -184,10 +170,10 @@ func (colReplica *collectionReplicaImpl) getVecFieldsByCollectionID(collectionID
 		return nil, err
 	}
 
-	vecFields := make(map[int64]string)
+	vecFields := make([]int64, 0)
 	for _, field := range col.Schema().Fields {
 		if field.DataType == schemapb.DataType_VECTOR_BINARY || field.DataType == schemapb.DataType_VECTOR_FLOAT {
-			vecFields[field.FieldID] = field.Name
+			vecFields = append(vecFields, field.FieldID)
 		}
 	}
 
diff --git a/internal/querynode/collection_replica_test.go b/internal/querynode/collection_replica_test.go
index d95cae394670a518f254d7875d6e524318fc899f..d0a81d27b59d20d13fc18c13c16b11e994c4ee17 100644
--- a/internal/querynode/collection_replica_test.go
+++ b/internal/querynode/collection_replica_test.go
@@ -9,20 +9,20 @@ import (
 //----------------------------------------------------------------------------------------------------- collection
 func TestCollectionReplica_getCollectionNum(t *testing.T) {
 	node := newQueryNodeMock()
-	initTestMeta(t, node, "collection0", 0, 0)
+	initTestMeta(t, node, 0, 0)
 	assert.Equal(t, node.replica.getCollectionNum(), 1)
 	node.Stop()
 }
 
 func TestCollectionReplica_addCollection(t *testing.T) {
 	node := newQueryNodeMock()
-	initTestMeta(t, node, "collection0", 0, 0)
+	initTestMeta(t, node, 0, 0)
 	node.Stop()
 }
 
 func TestCollectionReplica_removeCollection(t *testing.T) {
 	node := newQueryNodeMock()
-	initTestMeta(t, node, "collection0", 0, 0)
+	initTestMeta(t, node, 0, 0)
 	assert.Equal(t, node.replica.getCollectionNum(), 1)
 
 	err := node.replica.removeCollection(0)
@@ -33,37 +33,19 @@ func TestCollectionReplica_removeCollection(t *testing.T) {
 
 func TestCollectionReplica_getCollectionByID(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 	targetCollection, err := node.replica.getCollectionByID(collectionID)
 	assert.NoError(t, err)
 	assert.NotNil(t, targetCollection)
-	assert.Equal(t, targetCollection.Name(), collectionName)
 	assert.Equal(t, targetCollection.ID(), collectionID)
 	node.Stop()
 }
 
-func TestCollectionReplica_getCollectionByName(t *testing.T) {
-	node := newQueryNodeMock()
-	collectionName := "collection0"
-	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
-
-	targetCollection, err := node.replica.getCollectionByName(collectionName)
-	assert.NoError(t, err)
-	assert.NotNil(t, targetCollection)
-	assert.Equal(t, targetCollection.Name(), collectionName)
-	assert.Equal(t, targetCollection.ID(), collectionID)
-
-	node.Stop()
-}
-
 func TestCollectionReplica_hasCollection(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
 	hasCollection := node.replica.hasCollection(collectionID)
 	assert.Equal(t, hasCollection, true)
@@ -76,9 +58,8 @@ func TestCollectionReplica_hasCollection(t *testing.T) {
 //----------------------------------------------------------------------------------------------------- partition
 func TestCollectionReplica_getPartitionNum(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
 	partitionTags := []string{"a", "b", "c"}
 	for _, tag := range partitionTags {
@@ -97,9 +78,8 @@ func TestCollectionReplica_getPartitionNum(t *testing.T) {
 
 func TestCollectionReplica_addPartition(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
 	partitionTags := []string{"a", "b", "c"}
 	for _, tag := range partitionTags {
@@ -114,9 +94,8 @@ func TestCollectionReplica_addPartition(t *testing.T) {
 
 func TestCollectionReplica_removePartition(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
 	partitionTags := []string{"a", "b", "c"}
 
@@ -134,11 +113,10 @@ func TestCollectionReplica_removePartition(t *testing.T) {
 
 func TestCollectionReplica_addPartitionsByCollectionMeta(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 	collectionMeta.PartitionTags = []string{"p0", "p1", "p2"}
 
 	err := node.replica.addPartitionsByCollectionMeta(collectionMeta)
@@ -158,11 +136,10 @@ func TestCollectionReplica_addPartitionsByCollectionMeta(t *testing.T) {
 
 func TestCollectionReplica_removePartitionsByCollectionMeta(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 	collectionMeta.PartitionTags = []string{"p0"}
 
 	err := node.replica.addPartitionsByCollectionMeta(collectionMeta)
@@ -183,11 +160,10 @@ func TestCollectionReplica_removePartitionsByCollectionMeta(t *testing.T) {
 
 func TestCollectionReplica_getPartitionByTag(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	for _, tag := range collectionMeta.PartitionTags {
 		err := node.replica.addPartition2(collectionID, tag)
@@ -202,11 +178,10 @@ func TestCollectionReplica_getPartitionByTag(t *testing.T) {
 
 func TestCollectionReplica_hasPartition(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 	err := node.replica.addPartition2(collectionID, collectionMeta.PartitionTags[0])
 	assert.NoError(t, err)
 	hasPartition := node.replica.hasPartition(collectionID, "default")
@@ -219,9 +194,8 @@ func TestCollectionReplica_hasPartition(t *testing.T) {
 //----------------------------------------------------------------------------------------------------- segment
 func TestCollectionReplica_addSegment(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
 	const segmentNum = 3
 	tag := "default"
@@ -238,9 +212,8 @@ func TestCollectionReplica_addSegment(t *testing.T) {
 
 func TestCollectionReplica_removeSegment(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
 	const segmentNum = 3
 	tag := "default"
@@ -260,9 +233,8 @@ func TestCollectionReplica_removeSegment(t *testing.T) {
 
 func TestCollectionReplica_getSegmentByID(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
 	const segmentNum = 3
 	tag := "default"
@@ -280,9 +252,8 @@ func TestCollectionReplica_getSegmentByID(t *testing.T) {
 
 func TestCollectionReplica_hasSegment(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
 	const segmentNum = 3
 	tag := "default"
@@ -304,9 +275,8 @@ func TestCollectionReplica_hasSegment(t *testing.T) {
 
 func TestCollectionReplica_freeAll(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
 	node.Stop()
 
diff --git a/internal/querynode/collection_test.go b/internal/querynode/collection_test.go
index 8eaa0951aeb6c69f4fc5f0df7708904b4209d44c..ad0970c7715f564e48b9d6e8d81440b0ae532ca3 100644
--- a/internal/querynode/collection_test.go
+++ b/internal/querynode/collection_test.go
@@ -8,11 +8,10 @@ import (
 
 func TestCollection_Partitions(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
-	collection, err := node.replica.getCollectionByName(collectionName)
+	collection, err := node.replica.getCollectionByID(collectionID)
 	assert.NoError(t, err)
 
 	partitions := collection.Partitions()
@@ -20,22 +19,18 @@ func TestCollection_Partitions(t *testing.T) {
 }
 
 func TestCollection_newCollection(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 }
 
 func TestCollection_deleteCollection(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 	deleteCollection(collection)
 }
diff --git a/internal/querynode/data_sync_service_test.go b/internal/querynode/data_sync_service_test.go
index fe6dacf2dcf043009dfefc4c985dbd7fa0f3a207..6a180f0d5229aa20e7e51ebb4a90c69af338c5f3 100644
--- a/internal/querynode/data_sync_service_test.go
+++ b/internal/querynode/data_sync_service_test.go
@@ -16,7 +16,7 @@ import (
 // NOTE: start pulsar before test
 func TestDataSyncService_Start(t *testing.T) {
 	node := newQueryNodeMock()
-	initTestMeta(t, node, "collection0", 0, 0)
+	initTestMeta(t, node, 0, 0)
 	// test data generate
 	const msgLength = 10
 	const DIM = 16
@@ -61,12 +61,12 @@ func TestDataSyncService_Start(t *testing.T) {
 					Timestamp: uint64(i + 1000),
 					SourceID:  0,
 				},
-				CollectionName: "collection0",
-				PartitionName:  "default",
-				SegmentID:      int64(0),
-				ChannelID:      "0",
-				Timestamps:     []uint64{uint64(i + 1000), uint64(i + 1000)},
-				RowIDs:         []int64{int64(i), int64(i)},
+				CollectionID:  UniqueID(0),
+				PartitionName: "default",
+				SegmentID:     int64(0),
+				ChannelID:     "0",
+				Timestamps:    []uint64{uint64(i + 1000), uint64(i + 1000)},
+				RowIDs:        []int64{int64(i), int64(i)},
 				RowData: []*commonpb.Blob{
 					{Value: rawData},
 					{Value: rawData},
diff --git a/internal/querynode/flow_graph_dd_node.go b/internal/querynode/flow_graph_dd_node.go
index 5c369fc2df7e64ef68358ff9e62b17abdd144ec0..a61355a27483009affc6b34542e8899d5b046f92 100644
--- a/internal/querynode/flow_graph_dd_node.go
+++ b/internal/querynode/flow_graph_dd_node.go
@@ -37,7 +37,7 @@ func (ddNode *ddNode) Operate(in []*Msg) []*Msg {
 	}
 
 	var ddMsg = ddMsg{
-		collectionRecords: make(map[string][]metaOperateRecord),
+		collectionRecords: make(map[UniqueID][]metaOperateRecord),
 		partitionRecords:  make(map[string][]metaOperateRecord),
 		timeRange: TimeRange{
 			timestampMin: msMsg.TimestampMin(),
@@ -108,8 +108,7 @@ func (ddNode *ddNode) createCollection(msg *msgstream.CreateCollectionMsg) {
 		return
 	}
 
-	collectionName := schema.Name
-	ddNode.ddMsg.collectionRecords[collectionName] = append(ddNode.ddMsg.collectionRecords[collectionName],
+	ddNode.ddMsg.collectionRecords[collectionID] = append(ddNode.ddMsg.collectionRecords[collectionID],
 		metaOperateRecord{
 			createOrDrop: true,
 			timestamp:    msg.Base.Timestamp,
@@ -125,8 +124,7 @@ func (ddNode *ddNode) dropCollection(msg *msgstream.DropCollectionMsg) {
 	//	return
 	//}
 
-	collectionName := msg.CollectionName
-	ddNode.ddMsg.collectionRecords[collectionName] = append(ddNode.ddMsg.collectionRecords[collectionName],
+	ddNode.ddMsg.collectionRecords[collectionID] = append(ddNode.ddMsg.collectionRecords[collectionID],
 		metaOperateRecord{
 			createOrDrop: false,
 			timestamp:    msg.Base.Timestamp,
diff --git a/internal/querynode/flow_graph_filter_dm_node.go b/internal/querynode/flow_graph_filter_dm_node.go
index 5a75be2c568275016ca76bfa814c7294e06188fd..d166d11f54f1b37266e4727d29a544b7a5c8f75e 100644
--- a/internal/querynode/flow_graph_filter_dm_node.go
+++ b/internal/querynode/flow_graph_filter_dm_node.go
@@ -110,7 +110,7 @@ func (fdmNode *filterDmNode) filterInvalidInsertMessage(msg *msgstream.InsertMsg
 	//}
 
 	// No dd record, do all insert requests.
-	records, ok := fdmNode.ddMsg.collectionRecords[msg.CollectionName]
+	records, ok := fdmNode.ddMsg.collectionRecords[msg.CollectionID]
 	if !ok {
 		return msg
 	}
diff --git a/internal/querynode/flow_graph_insert_node.go b/internal/querynode/flow_graph_insert_node.go
index f63f68caadc77a7800d7bef5a0b857d267d3240f..10aa43d18cfc1a69659136ba022f89d948b9a6bb 100644
--- a/internal/querynode/flow_graph_insert_node.go
+++ b/internal/querynode/flow_graph_insert_node.go
@@ -81,12 +81,7 @@ func (iNode *insertNode) Operate(in []*Msg) []*Msg {
 
 		// check if segment exists, if not, create this segment
 		if !iNode.replica.hasSegment(task.SegmentID) {
-			collection, err := iNode.replica.getCollectionByName(task.CollectionName)
-			if err != nil {
-				log.Println(err)
-				continue
-			}
-			err = iNode.replica.addSegment2(task.SegmentID, task.PartitionName, collection.ID(), segTypeGrowing)
+			err := iNode.replica.addSegment2(task.SegmentID, task.PartitionName, task.CollectionID, segTypeGrowing)
 			if err != nil {
 				log.Println(err)
 				continue
diff --git a/internal/querynode/flow_graph_message.go b/internal/querynode/flow_graph_message.go
index 451f9b6952ad003a3f687ee44550808cce6bc481..484614d10cf18d88d0d105fbc586c08e6e987ea5 100644
--- a/internal/querynode/flow_graph_message.go
+++ b/internal/querynode/flow_graph_message.go
@@ -14,7 +14,7 @@ type key2SegMsg struct {
 }
 
 type ddMsg struct {
-	collectionRecords map[string][]metaOperateRecord
+	collectionRecords map[UniqueID][]metaOperateRecord
 	partitionRecords  map[string][]metaOperateRecord
 	gcRecord          *gcRecord
 	timeRange         TimeRange
diff --git a/internal/querynode/index.go b/internal/querynode/index.go
index 8c8f84b17e6e7c59dc0dbe5e3c1a2179f3bfbfb3..e0539990a782328c8581f6750d3ed79faff0a8bd 100644
--- a/internal/querynode/index.go
+++ b/internal/querynode/index.go
@@ -29,7 +29,7 @@ func (s *Segment) buildIndex(collection *Collection) commonpb.Status {
 	return commonpb.Status{ErrorCode: commonpb.ErrorCode_SUCCESS}
 }
 
-func (s *Segment) dropIndex(fieldName string) commonpb.Status {
+func (s *Segment) dropIndex(fieldID int64) commonpb.Status {
 	// WARN: Not support yet
 
 	return commonpb.Status{ErrorCode: commonpb.ErrorCode_SUCCESS}
diff --git a/internal/querynode/load_index_info.go b/internal/querynode/load_index_info.go
index d56cca4f21dbf1972c79ebe331b29ffacd4a33e9..37032ffe1888b378feb1f43fa3e038df39e9f106 100644
--- a/internal/querynode/load_index_info.go
+++ b/internal/querynode/load_index_info.go
@@ -51,10 +51,9 @@ func (li *LoadIndexInfo) appendIndexParam(indexKey string, indexValue string) er
 	return nil
 }
 
-func (li *LoadIndexInfo) appendFieldInfo(fieldName string, fieldID int64) error {
-	cFieldName := C.CString(fieldName)
+func (li *LoadIndexInfo) appendFieldInfo(fieldID int64) error {
 	cFieldID := C.long(fieldID)
-	status := C.AppendFieldInfo(li.cLoadIndexInfo, cFieldName, cFieldID)
+	status := C.AppendFieldInfo(li.cLoadIndexInfo, cFieldID)
 	errorCode := status.error_code
 
 	if errorCode != 0 {
diff --git a/internal/querynode/load_index_info_test.go b/internal/querynode/load_index_info_test.go
index 95261c7002eb7c9012598afab0fe59d66d69840d..9cfd4f14a928651fe46a631d1ee826cb1bbcb7e2 100644
--- a/internal/querynode/load_index_info_test.go
+++ b/internal/querynode/load_index_info_test.go
@@ -1,12 +1,64 @@
 package querynode
 
 import (
+	"strconv"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
+	"github.com/zilliztech/milvus-distributed/internal/indexnode"
 	"github.com/zilliztech/milvus-distributed/internal/proto/commonpb"
 )
 
+func genIndexBinarySet() ([][]byte, error) {
+	const (
+		msgLength = 1000
+		DIM       = 16
+	)
+
+	indexParams := make(map[string]string)
+	indexParams["index_type"] = "IVF_PQ"
+	indexParams["index_mode"] = "cpu"
+	indexParams["dim"] = "16"
+	indexParams["k"] = "10"
+	indexParams["nlist"] = "100"
+	indexParams["nprobe"] = "10"
+	indexParams["m"] = "4"
+	indexParams["nbits"] = "8"
+	indexParams["metric_type"] = "L2"
+	indexParams["SLICE_SIZE"] = "4"
+
+	typeParams := make(map[string]string)
+	typeParams["dim"] = strconv.Itoa(DIM)
+	var indexRowData []float32
+	for n := 0; n < msgLength; n++ {
+		for i := 0; i < DIM; i++ {
+			indexRowData = append(indexRowData, float32(n*i))
+		}
+	}
+
+	index, err := indexnode.NewCIndex(typeParams, indexParams)
+	if err != nil {
+		return nil, err
+	}
+
+	err = index.BuildFloatVecIndexWithoutIds(indexRowData)
+	if err != nil {
+		return nil, err
+	}
+
+	// save index to minio
+	binarySet, err := index.Serialize()
+	if err != nil {
+		return nil, err
+	}
+
+	bytesSet := make([][]byte, 0)
+	for i := range binarySet {
+		bytesSet = append(bytesSet, binarySet[i].Value)
+	}
+	return bytesSet, nil
+}
+
 func TestLoadIndexInfo(t *testing.T) {
 	indexParams := make([]*commonpb.KeyValuePair, 0)
 	indexParams = append(indexParams, &commonpb.KeyValuePair{
@@ -18,19 +70,21 @@ func TestLoadIndexInfo(t *testing.T) {
 		Value: "cpu",
 	})
 
-	indexBytes := make([][]byte, 0)
-	indexValue := make([]byte, 10)
-	indexBytes = append(indexBytes, indexValue)
+	indexBytes, err := genIndexBinarySet()
+	assert.NoError(t, err)
 	indexPaths := make([]string, 0)
-	indexPaths = append(indexPaths, "index-0")
+	indexPaths = append(indexPaths, "IVF")
 
 	loadIndexInfo, err := newLoadIndexInfo()
 	assert.Nil(t, err)
 	for _, indexParam := range indexParams {
-		loadIndexInfo.appendIndexParam(indexParam.Key, indexParam.Value)
+		err = loadIndexInfo.appendIndexParam(indexParam.Key, indexParam.Value)
+		assert.NoError(t, err)
 	}
-	loadIndexInfo.appendFieldInfo("field0", 0)
-	loadIndexInfo.appendIndex(indexBytes, indexPaths)
+	err = loadIndexInfo.appendFieldInfo(0)
+	assert.NoError(t, err)
+	err = loadIndexInfo.appendIndex(indexBytes, indexPaths)
+	assert.NoError(t, err)
 
 	deleteLoadIndexInfo(loadIndexInfo)
 }
diff --git a/internal/querynode/load_service.go b/internal/querynode/load_service.go
index bec0170ef86510314b1a956d4d8119f90a9ba865..459926fa53206feeecfc2819b937452ce7a429a8 100644
--- a/internal/querynode/load_service.go
+++ b/internal/querynode/load_service.go
@@ -47,7 +47,6 @@ type loadService struct {
 type loadIndex struct {
 	segmentID  UniqueID
 	fieldID    int64
-	fieldName  string
 	indexPaths []string
 }
 
@@ -231,7 +230,7 @@ func (s *loadService) loadIndex(indexPath []string) ([][]byte, indexParam, error
 		// get index params when detecting indexParamPrefix
 		if path.Base(p) == storage.IndexParamsFile {
 			indexCodec := storage.NewIndexCodec()
-			_, indexParams, err = indexCodec.Deserialize([]*storage.Blob{
+			_, indexParams, _, _, err = indexCodec.Deserialize([]*storage.Blob{
 				{
 					Key:   storage.IndexParamsFile,
 					Value: []byte(indexPiece),
@@ -262,7 +261,7 @@ func (s *loadService) updateSegmentIndex(indexParams indexParam, bytesIndex [][]
 	if err != nil {
 		return err
 	}
-	err = loadIndexInfo.appendFieldInfo(l.fieldName, l.fieldID)
+	err = loadIndexInfo.appendFieldInfo(l.fieldID)
 	if err != nil {
 		return err
 	}
@@ -422,10 +421,9 @@ func (s *loadService) loadIndexImmediate(segment *Segment, indexPaths []string)
 	if err != nil {
 		return err
 	}
-	for id, name := range vecFieldIDs {
+	for _, id := range vecFieldIDs {
 		l := &loadIndex{
 			segmentID:  segment.ID(),
-			fieldName:  name,
 			fieldID:    id,
 			indexPaths: indexPaths,
 		}
@@ -449,10 +447,9 @@ func (s *loadService) loadIndexDelayed(collectionID, segmentID UniqueID, indexPa
 	if err != nil {
 		return err
 	}
-	for id, name := range vecFieldIDs {
+	for _, id := range vecFieldIDs {
 		l := &loadIndex{
 			segmentID:  segmentID,
-			fieldName:  name,
 			fieldID:    id,
 			indexPaths: indexPaths,
 		}
@@ -487,10 +484,18 @@ func (s *loadService) getInsertBinlogPaths(segmentID UniqueID) ([]*internalpb2.S
 	return pathResponse.Paths, pathResponse.FieldIDs, nil
 }
 
-func (s *loadService) filterOutVectorFields(fieldIDs []int64, vectorFields map[int64]string) []int64 {
+func (s *loadService) filterOutVectorFields(fieldIDs []int64, vectorFields []int64) []int64 {
+	containsFunc := func(s []int64, e int64) bool {
+		for _, a := range s {
+			if a == e {
+				return true
+			}
+		}
+		return false
+	}
 	targetFields := make([]int64, 0)
 	for _, id := range fieldIDs {
-		if _, ok := vectorFields[id]; !ok {
+		if !containsFunc(vectorFields, id) {
 			targetFields = append(targetFields, id)
 		}
 	}
diff --git a/internal/querynode/load_service_test.go b/internal/querynode/load_service_test.go
index f22ab9e80e6b6ad206eaf43121f65995e28705bd..fcd2773042a019a174f9c9f0c768f431a20548db 100644
--- a/internal/querynode/load_service_test.go
+++ b/internal/querynode/load_service_test.go
@@ -89,7 +89,7 @@ import (
 //				Timestamp: timestamps[0],
 //				SourceID:  0,
 //			},
-//			CollectionName: "collection0",
+//			CollectionID: UniqueID(collectionID),
 //			PartitionName:  "default",
 //			SegmentID:      segmentID,
 //			ChannelID:      "0",
@@ -425,7 +425,7 @@ import (
 //				Timestamp: timestamps[0],
 //				SourceID:  0,
 //			},
-//			CollectionName: "collection0",
+//			CollectionID: UniqueID(collectionID),
 //			PartitionName:  "default",
 //			SegmentID:      segmentID,
 //			ChannelID:      "0",
@@ -726,7 +726,7 @@ func generateInsertBinLog(collectionID UniqueID, partitionID UniqueID, segmentID
 	}
 
 	// buffer data to binLogs
-	collMeta := genTestCollectionMeta("collection0", collectionID, false)
+	collMeta := genTestCollectionMeta(collectionID, false)
 	collMeta.Schema.Fields = append(collMeta.Schema.Fields, &schemapb.FieldSchema{
 		FieldID:  0,
 		Name:     "uid",
@@ -853,7 +853,7 @@ func generateIndex(segmentID UniqueID) ([]string, error) {
 
 	// serialize index params
 	var indexCodec storage.IndexCodec
-	serializedIndexBlobs, err := indexCodec.Serialize(binarySet, indexParams)
+	serializedIndexBlobs, err := indexCodec.Serialize(binarySet, indexParams, "index_test_name", 1234)
 	if err != nil {
 		return nil, err
 	}
@@ -871,7 +871,7 @@ func generateIndex(segmentID UniqueID) ([]string, error) {
 	return indexPaths, nil
 }
 
-func doInsert(ctx context.Context, collectionName string, partitionTag string, segmentID UniqueID) error {
+func doInsert(ctx context.Context, collectionID UniqueID, partitionTag string, segmentID UniqueID) error {
 	const msgLength = 1000
 	const DIM = 16
 
@@ -907,12 +907,12 @@ func doInsert(ctx context.Context, collectionName string, partitionTag string, s
 					Timestamp: uint64(i + 1000),
 					SourceID:  0,
 				},
-				CollectionName: collectionName,
-				PartitionName:  partitionTag,
-				SegmentID:      segmentID,
-				ChannelID:      "0",
-				Timestamps:     []uint64{uint64(i + 1000)},
-				RowIDs:         []int64{int64(i)},
+				CollectionID:  collectionID,
+				PartitionName: partitionTag,
+				SegmentID:     segmentID,
+				ChannelID:     "0",
+				Timestamps:    []uint64{uint64(i + 1000)},
+				RowIDs:        []int64{int64(i)},
 				RowData: []*commonpb.Blob{
 					{Value: rawData},
 				},
@@ -1057,8 +1057,7 @@ func TestSegmentLoad_Search_Vector(t *testing.T) {
 	ctx := node.queryNodeLoopCtx
 	node.loadService = newLoadService(ctx, nil, nil, nil, node.replica, nil)
 
-	collectionName := "collection0"
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
 	err := node.replica.addPartition(collectionID, partitionID)
 	assert.NoError(t, err)
@@ -1119,7 +1118,7 @@ func TestSegmentLoad_Search_Vector(t *testing.T) {
 	placeholderGroups = append(placeholderGroups, holder)
 
 	// wait for segment building index
-	time.Sleep(3 * time.Second)
+	time.Sleep(1 * time.Second)
 
 	_, err = segment.segmentSearch(plan, placeholderGroups, []Timestamp{searchTimestamp})
 	assert.Nil(t, err)
diff --git a/internal/querynode/meta_service_test.go b/internal/querynode/meta_service_test.go
index 2e816b03ef0e96105b8fa3879512c69a2bc34617..f47660a3de7774b696daee53379ed6df1383b895 100644
--- a/internal/querynode/meta_service_test.go
+++ b/internal/querynode/meta_service_test.go
@@ -96,9 +96,8 @@ func TestMetaService_isSegmentChannelRangeInQueryNodeChannelRange(t *testing.T)
 }
 
 func TestMetaService_printCollectionStruct(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 	printCollectionStruct(collectionMeta)
 }
 
@@ -156,7 +155,7 @@ func TestMetaService_processCollectionCreate(t *testing.T) {
 	collectionNum := node.replica.getCollectionNum()
 	assert.Equal(t, collectionNum, 1)
 
-	collection, err := node.replica.getCollectionByName("test")
+	collection, err := node.replica.getCollectionByID(UniqueID(0))
 	assert.NoError(t, err)
 	assert.Equal(t, collection.ID(), UniqueID(0))
 	node.Stop()
@@ -164,9 +163,8 @@ func TestMetaService_processCollectionCreate(t *testing.T) {
 
 func TestMetaService_processSegmentCreate(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 	node.metaService = newMetaService(node.queryNodeLoopCtx, node.replica)
 
 	id := "0"
@@ -222,7 +220,7 @@ func TestMetaService_processCreate(t *testing.T) {
 	collectionNum := node.replica.getCollectionNum()
 	assert.Equal(t, collectionNum, 1)
 
-	collection, err := node.replica.getCollectionByName("test")
+	collection, err := node.replica.getCollectionByID(UniqueID(0))
 	assert.NoError(t, err)
 	assert.Equal(t, collection.ID(), UniqueID(0))
 
@@ -242,10 +240,9 @@ func TestMetaService_processCreate(t *testing.T) {
 
 func TestMetaService_processSegmentModify(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
 	segmentID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, segmentID)
+	initTestMeta(t, node, collectionID, segmentID)
 	node.metaService = newMetaService(node.queryNodeLoopCtx, node.replica)
 
 	id := "0"
@@ -314,7 +311,7 @@ func TestMetaService_processCollectionModify(t *testing.T) {
 	collectionNum := node.replica.getCollectionNum()
 	assert.Equal(t, collectionNum, 1)
 
-	collection, err := node.replica.getCollectionByName("test")
+	collection, err := node.replica.getCollectionByID(UniqueID(0))
 	assert.NoError(t, err)
 	assert.Equal(t, collection.ID(), UniqueID(0))
 
@@ -363,7 +360,7 @@ func TestMetaService_processCollectionModify(t *testing.T) {
 				`
 
 	(*node.metaService).processCollectionModify(id, newValue)
-	collection, err = node.replica.getCollectionByName("test")
+	collection, err = node.replica.getCollectionByID(UniqueID(0))
 	assert.NoError(t, err)
 	assert.Equal(t, collection.ID(), UniqueID(0))
 
@@ -422,7 +419,7 @@ func TestMetaService_processModify(t *testing.T) {
 	collectionNum := node.replica.getCollectionNum()
 	assert.Equal(t, collectionNum, 1)
 
-	collection, err := node.replica.getCollectionByName("test")
+	collection, err := node.replica.getCollectionByID(UniqueID(0))
 	assert.NoError(t, err)
 	assert.Equal(t, collection.ID(), UniqueID(0))
 
@@ -485,7 +482,7 @@ func TestMetaService_processModify(t *testing.T) {
 				`
 
 	(*node.metaService).processModify(key1, msg3)
-	collection, err = node.replica.getCollectionByName("test")
+	collection, err = node.replica.getCollectionByID(UniqueID(0))
 	assert.NoError(t, err)
 	assert.Equal(t, collection.ID(), UniqueID(0))
 
@@ -517,9 +514,8 @@ func TestMetaService_processModify(t *testing.T) {
 
 func TestMetaService_processSegmentDelete(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 	node.metaService = newMetaService(node.queryNodeLoopCtx, node.replica)
 
 	id := "0"
@@ -578,7 +574,7 @@ func TestMetaService_processCollectionDelete(t *testing.T) {
 	collectionNum := node.replica.getCollectionNum()
 	assert.Equal(t, collectionNum, 1)
 
-	collection, err := node.replica.getCollectionByName("test")
+	collection, err := node.replica.getCollectionByID(UniqueID(0))
 	assert.NoError(t, err)
 	assert.Equal(t, collection.ID(), UniqueID(0))
 
@@ -626,7 +622,7 @@ func TestMetaService_processDelete(t *testing.T) {
 	collectionNum := node.replica.getCollectionNum()
 	assert.Equal(t, collectionNum, 1)
 
-	collection, err := node.replica.getCollectionByName("test")
+	collection, err := node.replica.getCollectionByID(UniqueID(0))
 	assert.NoError(t, err)
 	assert.Equal(t, collection.ID(), UniqueID(0))
 
diff --git a/internal/querynode/partition_test.go b/internal/querynode/partition_test.go
index 0d5716f7c875fb69dc372eb97ed7daedaa51fa74..707cc5513a620822bed3084d02004bfc96320409 100644
--- a/internal/querynode/partition_test.go
+++ b/internal/querynode/partition_test.go
@@ -8,11 +8,10 @@ import (
 
 func TestPartition_Segments(t *testing.T) {
 	node := newQueryNodeMock()
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	initTestMeta(t, node, collectionName, collectionID, 0)
+	initTestMeta(t, node, collectionID, 0)
 
-	collection, err := node.replica.getCollectionByName(collectionName)
+	collection, err := node.replica.getCollectionByID(collectionID)
 	assert.NoError(t, err)
 
 	partitions := collection.Partitions()
diff --git a/internal/querynode/plan_test.go b/internal/querynode/plan_test.go
index 9f93608e4436fbc8a8e668bb319d82f16ff7b4df..43d4ddb47f3e930166c958b9a50bde6d44b2c37d 100644
--- a/internal/querynode/plan_test.go
+++ b/internal/querynode/plan_test.go
@@ -12,9 +12,8 @@ import (
 )
 
 func TestPlan_Plan(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
 
@@ -32,9 +31,8 @@ func TestPlan_Plan(t *testing.T) {
 }
 
 func TestPlan_PlaceholderGroup(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
 
diff --git a/internal/querynode/query_node_test.go b/internal/querynode/query_node_test.go
index d489e9ed91a1903a2f76c2774bb4a9a1ee131ab9..e45af4e7f161944c697ecbd2bd347497f51a4fd0 100644
--- a/internal/querynode/query_node_test.go
+++ b/internal/querynode/query_node_test.go
@@ -27,7 +27,7 @@ func setup() {
 	Params.MetaRootPath = "/etcd/test/root/querynode"
 }
 
-func genTestCollectionMeta(collectionName string, collectionID UniqueID, isBinary bool) *etcdpb.CollectionMeta {
+func genTestCollectionMeta(collectionID UniqueID, isBinary bool) *etcdpb.CollectionMeta {
 	var fieldVec schemapb.FieldSchema
 	if isBinary {
 		fieldVec = schemapb.FieldSchema{
@@ -76,8 +76,9 @@ func genTestCollectionMeta(collectionName string, collectionID UniqueID, isBinar
 		DataType:     schemapb.DataType_INT32,
 	}
 
+	collectionName := rand.Int63n(1000000)
 	schema := schemapb.CollectionSchema{
-		Name:   collectionName,
+		Name:   "collection-" + strconv.FormatInt(collectionName, 10),
 		AutoID: true,
 		Fields: []*schemapb.FieldSchema{
 			&fieldVec, &fieldInt,
@@ -95,19 +96,18 @@ func genTestCollectionMeta(collectionName string, collectionID UniqueID, isBinar
 	return &collectionMeta
 }
 
-func initTestMeta(t *testing.T, node *QueryNode, collectionName string, collectionID UniqueID, segmentID UniqueID, optional ...bool) {
+func initTestMeta(t *testing.T, node *QueryNode, collectionID UniqueID, segmentID UniqueID, optional ...bool) {
 	isBinary := false
 	if len(optional) > 0 {
 		isBinary = optional[0]
 	}
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, isBinary)
+	collectionMeta := genTestCollectionMeta(collectionID, isBinary)
 
 	var err = node.replica.addCollection(collectionMeta.ID, collectionMeta.Schema)
 	assert.NoError(t, err)
 
-	collection, err := node.replica.getCollectionByName(collectionName)
+	collection, err := node.replica.getCollectionByID(collectionID)
 	assert.NoError(t, err)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 	assert.Equal(t, node.replica.getCollectionNum(), 1)
 
diff --git a/internal/querynode/reduce_test.go b/internal/querynode/reduce_test.go
index 9114b65167f7465b26c6a180abefd1985dc60403..2964e959b58c4415c3406773ac441262a40288eb 100644
--- a/internal/querynode/reduce_test.go
+++ b/internal/querynode/reduce_test.go
@@ -13,10 +13,9 @@ import (
 )
 
 func TestReduce_AllFunc(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
 	segmentID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
 	segment := newSegment2(collection, segmentID, Params.DefaultPartitionTag, collectionID, segTypeGrowing)
diff --git a/internal/querynode/search_service.go b/internal/querynode/search_service.go
index 040a858aabbfec4a7d19fea5c113d8c93f779b49..f649f62103069da814c2b2609ebe031af47f64be 100644
--- a/internal/querynode/search_service.go
+++ b/internal/querynode/search_service.go
@@ -238,14 +238,13 @@ func (ss *searchService) search(msg msgstream.TsMsg) error {
 		span.LogFields(oplog.Error(err))
 		return errors.New("unmarshal query failed")
 	}
-	collectionName := query.CollectionName
+	collectionID := searchMsg.CollectionID
 	partitionTagsInQuery := query.PartitionNames
-	collection, err := ss.replica.getCollectionByName(collectionName)
+	collection, err := ss.replica.getCollectionByID(collectionID)
 	if err != nil {
 		span.LogFields(oplog.Error(err))
 		return err
 	}
-	collectionID := collection.ID()
 	dsl := query.Dsl
 	plan, err := createPlan(*collection, dsl)
 	if err != nil {
diff --git a/internal/querynode/search_service_test.go b/internal/querynode/search_service_test.go
index f74d6121d6f91013f4d510f81fe6321908d6b477..989da32152d2cf430b6af8ad2c36ce4bb388fd0b 100644
--- a/internal/querynode/search_service_test.go
+++ b/internal/querynode/search_service_test.go
@@ -20,7 +20,7 @@ import (
 
 func TestSearch_Search(t *testing.T) {
 	node := newQueryNodeMock()
-	initTestMeta(t, node, "collection0", 0, 0)
+	initTestMeta(t, node, 0, 0)
 
 	pulsarURL := Params.PulsarAddress
 
@@ -136,12 +136,12 @@ func TestSearch_Search(t *testing.T) {
 					Timestamp: uint64(10 + 1000),
 					SourceID:  0,
 				},
-				CollectionName: "collection0",
-				PartitionName:  "default",
-				SegmentID:      int64(0),
-				ChannelID:      "0",
-				Timestamps:     []uint64{uint64(i + 1000)},
-				RowIDs:         []int64{int64(i)},
+				CollectionID:  UniqueID(0),
+				PartitionName: "default",
+				SegmentID:     int64(0),
+				ChannelID:     "0",
+				Timestamps:    []uint64{uint64(i + 1000)},
+				RowIDs:        []int64{int64(i)},
 				RowData: []*commonpb.Blob{
 					{Value: rawData},
 				},
@@ -214,7 +214,7 @@ func TestSearch_Search(t *testing.T) {
 
 func TestSearch_SearchMultiSegments(t *testing.T) {
 	node := NewQueryNode(context.Background(), 0)
-	initTestMeta(t, node, "collection0", 0, 0)
+	initTestMeta(t, node, 0, 0)
 
 	pulsarURL := Params.PulsarAddress
 
@@ -334,12 +334,12 @@ func TestSearch_SearchMultiSegments(t *testing.T) {
 					Timestamp: uint64(i + 1000),
 					SourceID:  0,
 				},
-				CollectionName: "collection0",
-				PartitionName:  "default",
-				SegmentID:      int64(segmentID),
-				ChannelID:      "0",
-				Timestamps:     []uint64{uint64(i + 1000)},
-				RowIDs:         []int64{int64(i)},
+				CollectionID:  UniqueID(0),
+				PartitionName: "default",
+				SegmentID:     int64(segmentID),
+				ChannelID:     "0",
+				Timestamps:    []uint64{uint64(i + 1000)},
+				RowIDs:        []int64{int64(i)},
 				RowData: []*commonpb.Blob{
 					{Value: rawData},
 				},
diff --git a/internal/querynode/segment_test.go b/internal/querynode/segment_test.go
index 4a51420c60a519722fe39634464e71b549a585f4..8243144e386547222472af44c02e747fbcafa841 100644
--- a/internal/querynode/segment_test.go
+++ b/internal/querynode/segment_test.go
@@ -15,12 +15,10 @@ import (
 
 //-------------------------------------------------------------------------------------- constructor and destructor
 func TestSegment_newSegment(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 
 	segmentID := UniqueID(0)
@@ -31,12 +29,10 @@ func TestSegment_newSegment(t *testing.T) {
 }
 
 func TestSegment_deleteSegment(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 
 	segmentID := UniqueID(0)
@@ -49,12 +45,10 @@ func TestSegment_deleteSegment(t *testing.T) {
 
 //-------------------------------------------------------------------------------------- stats functions
 func TestSegment_getRowCount(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 
 	segmentID := UniqueID(0)
@@ -98,12 +92,10 @@ func TestSegment_getRowCount(t *testing.T) {
 }
 
 func TestSegment_getDeletedCount(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 
 	segmentID := UniqueID(0)
@@ -153,12 +145,10 @@ func TestSegment_getDeletedCount(t *testing.T) {
 }
 
 func TestSegment_getMemSize(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 
 	segmentID := UniqueID(0)
@@ -203,12 +193,10 @@ func TestSegment_getMemSize(t *testing.T) {
 
 //-------------------------------------------------------------------------------------- dm & search functions
 func TestSegment_segmentInsert(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 	segmentID := UniqueID(0)
 	segment := newSegment2(collection, segmentID, Params.DefaultPartitionTag, collectionID, segTypeGrowing)
@@ -247,12 +235,10 @@ func TestSegment_segmentInsert(t *testing.T) {
 }
 
 func TestSegment_segmentDelete(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 
 	segmentID := UniqueID(0)
@@ -298,12 +284,10 @@ func TestSegment_segmentDelete(t *testing.T) {
 }
 
 func TestSegment_segmentSearch(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 
 	segmentID := UniqueID(0)
@@ -381,12 +365,10 @@ func TestSegment_segmentSearch(t *testing.T) {
 
 //-------------------------------------------------------------------------------------- preDm functions
 func TestSegment_segmentPreInsert(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 
 	segmentID := UniqueID(0)
@@ -421,12 +403,10 @@ func TestSegment_segmentPreInsert(t *testing.T) {
 }
 
 func TestSegment_segmentPreDelete(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 
 	segmentID := UniqueID(0)
@@ -470,12 +450,10 @@ func TestSegment_segmentPreDelete(t *testing.T) {
 }
 
 func TestSegment_segmentLoadFieldData(t *testing.T) {
-	collectionName := "collection0"
 	collectionID := UniqueID(0)
-	collectionMeta := genTestCollectionMeta(collectionName, collectionID, false)
+	collectionMeta := genTestCollectionMeta(collectionID, false)
 
 	collection := newCollection(collectionMeta.ID, collectionMeta.Schema)
-	assert.Equal(t, collection.Name(), collectionName)
 	assert.Equal(t, collection.ID(), collectionID)
 
 	segmentID := UniqueID(0)
diff --git a/internal/querynode/stats_service_test.go b/internal/querynode/stats_service_test.go
index dc132dfb81313f8b48157ab3d4d0eed084ce796d..3ba0b8a0ba389970e49439bfd1bfbbdb0a32fe9e 100644
--- a/internal/querynode/stats_service_test.go
+++ b/internal/querynode/stats_service_test.go
@@ -10,7 +10,7 @@ import (
 // NOTE: start pulsar before test
 func TestStatsService_start(t *testing.T) {
 	node := newQueryNodeMock()
-	initTestMeta(t, node, "collection0", 0, 0)
+	initTestMeta(t, node, 0, 0)
 	node.statsService = newStatsService(node.queryNodeLoopCtx, node.replica, nil)
 	node.statsService.start()
 	node.Stop()
@@ -19,7 +19,7 @@ func TestStatsService_start(t *testing.T) {
 //NOTE: start pulsar before test
 func TestSegmentManagement_sendSegmentStatistic(t *testing.T) {
 	node := newQueryNodeMock()
-	initTestMeta(t, node, "collection0", 0, 0)
+	initTestMeta(t, node, 0, 0)
 
 	const receiveBufSize = 1024
 	// start pulsar
diff --git a/internal/storage/data_codec.go b/internal/storage/data_codec.go
index a48be40ba9b17c309c53c583b802f870d2e24d55..7d2f0eea8ee785d8bf9a0f8aac7d60dbeea47045 100644
--- a/internal/storage/data_codec.go
+++ b/internal/storage/data_codec.go
@@ -635,8 +635,16 @@ func NewIndexCodec() *IndexCodec {
 	return &IndexCodec{}
 }
 
-func (indexCodec *IndexCodec) Serialize(blobs []*Blob, params map[string]string) ([]*Blob, error) {
-	paramsBytes, err := json.Marshal(params)
+func (indexCodec *IndexCodec) Serialize(blobs []*Blob, params map[string]string, indexName string, indexID UniqueID) ([]*Blob, error) {
+	paramsBytes, err := json.Marshal(struct {
+		Params    map[string]string
+		IndexName string
+		IndexID   UniqueID
+	}{
+		Params:    params,
+		IndexName: indexName,
+		IndexID:   indexID,
+	})
 	if err != nil {
 		return nil, err
 	}
@@ -644,20 +652,27 @@ func (indexCodec *IndexCodec) Serialize(blobs []*Blob, params map[string]string)
 	return blobs, nil
 }
 
-func (indexCodec *IndexCodec) Deserialize(blobs []*Blob) ([]*Blob, map[string]string, error) {
-	var params map[string]string
+func (indexCodec *IndexCodec) Deserialize(blobs []*Blob) ([]*Blob, map[string]string, string, UniqueID, error) {
+	var file *Blob
 	for i := 0; i < len(blobs); i++ {
 		if blobs[i].Key != IndexParamsFile {
 			continue
 		}
-		if err := json.Unmarshal(blobs[i].Value, &params); err != nil {
-			return nil, nil, err
-		}
+		file = blobs[i]
 		blobs = append(blobs[:i], blobs[i+1:]...)
 		break
 	}
-	if params == nil {
-		return nil, nil, errors.New("can not find params blob")
+	if file == nil {
+		return nil, nil, "", -1, errors.New("can not find params blob")
 	}
-	return blobs, params, nil
+	info := struct {
+		Params    map[string]string
+		IndexName string
+		IndexID   UniqueID
+	}{}
+	if err := json.Unmarshal(file.Value, &info); err != nil {
+		return nil, nil, "", -1, errors.New("json unmarshal error: " + err.Error())
+	}
+
+	return blobs, info.Params, info.IndexName, info.IndexID, nil
 }
diff --git a/internal/storage/data_codec_test.go b/internal/storage/data_codec_test.go
index 64fc91874483b72a712e18f7be9fc5bef6dc5cd5..6df332f0c3b46ada6e5b430cd893fb123bb02d48 100644
--- a/internal/storage/data_codec_test.go
+++ b/internal/storage/data_codec_test.go
@@ -310,15 +310,17 @@ func TestIndexCodec(t *testing.T) {
 	indexParams := map[string]string{
 		"k1": "v1", "k2": "v2",
 	}
-	blobsInput, err := indexCodec.Serialize(blobs, indexParams)
+	blobsInput, err := indexCodec.Serialize(blobs, indexParams, "index_test_name", 1234)
 	assert.Nil(t, err)
 	assert.EqualValues(t, 4, len(blobsInput))
-	assert.EqualValues(t, IndexParamsFile, blobsInput[3])
-	blobsOutput, indexParamsOutput, err := indexCodec.Deserialize(blobsInput)
+	assert.EqualValues(t, IndexParamsFile, blobsInput[3].Key)
+	blobsOutput, indexParamsOutput, indexName, indexID, err := indexCodec.Deserialize(blobsInput)
 	assert.Nil(t, err)
 	assert.EqualValues(t, 3, len(blobsOutput))
 	for i := 0; i < 3; i++ {
 		assert.EqualValues(t, blobs[i], blobsOutput[i])
 	}
 	assert.EqualValues(t, indexParams, indexParamsOutput)
+	assert.EqualValues(t, "index_test_name", indexName)
+	assert.EqualValues(t, 1234, indexID)
 }