diff --git a/internal/core/src/pb/service_msg.pb.cc b/internal/core/src/pb/service_msg.pb.cc
index 1ee41c3b93fe50643ecf0e10e84498fc7b5e6a93..f2c6da00d198f7bf69862939a288967fe2670618 100644
--- a/internal/core/src/pb/service_msg.pb.cc
+++ b/internal/core/src/pb/service_msg.pb.cc
@@ -88,6 +88,14 @@ class QueryResultDefaultTypeInternal {
  public:
   ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<QueryResult> _instance;
 } _QueryResult_default_instance_;
+class IndexParamDefaultTypeInternal {
+ public:
+  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<IndexParam> _instance;
+} _IndexParam_default_instance_;
+class DescribeIndexResponseDefaultTypeInternal {
+ public:
+  ::PROTOBUF_NAMESPACE_ID::internal::ExplicitlyConstructed<DescribeIndexResponse> _instance;
+} _DescribeIndexResponse_default_instance_;
 }  // namespace service
 }  // namespace proto
 }  // namespace milvus
@@ -137,6 +145,22 @@ static void InitDefaultsscc_info_CollectionName_service_5fmsg_2eproto() {
 ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_CollectionName_service_5fmsg_2eproto =
     {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_CollectionName_service_5fmsg_2eproto}, {}};
 
+static void InitDefaultsscc_info_DescribeIndexResponse_service_5fmsg_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::milvus::proto::service::_DescribeIndexResponse_default_instance_;
+    new (ptr) ::milvus::proto::service::DescribeIndexResponse();
+    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::milvus::proto::service::DescribeIndexResponse::InitAsDefaultInstance();
+}
+
+::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<2> scc_info_DescribeIndexResponse_service_5fmsg_2eproto =
+    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 2, InitDefaultsscc_info_DescribeIndexResponse_service_5fmsg_2eproto}, {
+      &scc_info_Status_common_2eproto.base,
+      &scc_info_KeyValuePair_common_2eproto.base,}};
+
 static void InitDefaultsscc_info_Hits_service_5fmsg_2eproto() {
   GOOGLE_PROTOBUF_VERIFY_VERSION;
 
@@ -151,6 +175,21 @@ static void InitDefaultsscc_info_Hits_service_5fmsg_2eproto() {
 ::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<0> scc_info_Hits_service_5fmsg_2eproto =
     {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsscc_info_Hits_service_5fmsg_2eproto}, {}};
 
+static void InitDefaultsscc_info_IndexParam_service_5fmsg_2eproto() {
+  GOOGLE_PROTOBUF_VERIFY_VERSION;
+
+  {
+    void* ptr = &::milvus::proto::service::_IndexParam_default_instance_;
+    new (ptr) ::milvus::proto::service::IndexParam();
+    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
+  }
+  ::milvus::proto::service::IndexParam::InitAsDefaultInstance();
+}
+
+::PROTOBUF_NAMESPACE_ID::internal::SCCInfo<1> scc_info_IndexParam_service_5fmsg_2eproto =
+    {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_IndexParam_service_5fmsg_2eproto}, {
+      &scc_info_KeyValuePair_common_2eproto.base,}};
+
 static void InitDefaultsscc_info_IntegerListResponse_service_5fmsg_2eproto() {
   GOOGLE_PROTOBUF_VERIFY_VERSION;
 
@@ -330,7 +369,7 @@ static void InitDefaultsscc_info_SysConfigResponse_service_5fmsg_2eproto() {
     {{ATOMIC_VAR_INIT(::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsscc_info_SysConfigResponse_service_5fmsg_2eproto}, {
       &scc_info_Status_common_2eproto.base,}};
 
-static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_service_5fmsg_2eproto[16];
+static ::PROTOBUF_NAMESPACE_ID::Metadata file_level_metadata_service_5fmsg_2eproto[18];
 static const ::PROTOBUF_NAMESPACE_ID::EnumDescriptor* file_level_enum_descriptors_service_5fmsg_2eproto[1];
 static constexpr ::PROTOBUF_NAMESPACE_ID::ServiceDescriptor const** file_level_service_descriptors_service_5fmsg_2eproto = nullptr;
 
@@ -455,6 +494,25 @@ const ::PROTOBUF_NAMESPACE_ID::uint32 TableStruct_service_5fmsg_2eproto::offsets
   ~0u,  // no _weak_field_map_
   PROTOBUF_FIELD_OFFSET(::milvus::proto::service::QueryResult, status_),
   PROTOBUF_FIELD_OFFSET(::milvus::proto::service::QueryResult, hits_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::IndexParam, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::IndexParam, collection_name_),
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::IndexParam, field_name_),
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::IndexParam, index_name_),
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::IndexParam, extra_params_),
+  ~0u,  // no _has_bits_
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, _internal_metadata_),
+  ~0u,  // no _extensions_
+  ~0u,  // no _oneof_case_
+  ~0u,  // no _weak_field_map_
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, status_),
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, collection_name_),
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, field_name_),
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, index_name_),
+  PROTOBUF_FIELD_OFFSET(::milvus::proto::service::DescribeIndexResponse, extra_params_),
 };
 static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) = {
   { 0, -1, sizeof(::milvus::proto::service::CollectionName)},
@@ -473,6 +531,8 @@ static const ::PROTOBUF_NAMESPACE_ID::internal::MigrationSchema schemas[] PROTOB
   { 97, -1, sizeof(::milvus::proto::service::SysConfigResponse)},
   { 105, -1, sizeof(::milvus::proto::service::Hits)},
   { 113, -1, sizeof(::milvus::proto::service::QueryResult)},
+  { 120, -1, sizeof(::milvus::proto::service::IndexParam)},
+  { 129, -1, sizeof(::milvus::proto::service::DescribeIndexResponse)},
 };
 
 static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] = {
@@ -492,6 +552,8 @@ static ::PROTOBUF_NAMESPACE_ID::Message const * const file_default_instances[] =
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_SysConfigResponse_default_instance_),
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_Hits_default_instance_),
   reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_QueryResult_default_instance_),
+  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_IndexParam_default_instance_),
+  reinterpret_cast<const ::PROTOBUF_NAMESPACE_ID::Message*>(&::milvus::proto::service::_DescribeIndexResponse_default_instance_),
 };
 
 const char descriptor_table_protodef_service_5fmsg_2eproto[] PROTOBUF_SECTION_VARIABLE(protodesc_cold) =
@@ -534,20 +596,31 @@ const char descriptor_table_protodef_service_5fmsg_2eproto[] PROTOBUF_SECTION_VA
   " \003(\t\"5\n\004Hits\022\013\n\003IDs\030\001 \003(\003\022\020\n\010row_data\030\002 "
   "\003(\014\022\016\n\006scores\030\003 \003(\002\"H\n\013QueryResult\022+\n\006st"
   "atus\030\001 \001(\0132\033.milvus.proto.common.Status\022"
-  "\014\n\004hits\030\002 \003(\014*@\n\017PlaceholderType\022\010\n\004NONE"
-  "\020\000\022\021\n\rVECTOR_BINARY\020d\022\020\n\014VECTOR_FLOAT\020eB"
-  "CZAgithub.com/zilliztech/milvus-distribu"
-  "ted/internal/proto/servicepbb\006proto3"
+  "\014\n\004hits\030\002 \003(\014\"\206\001\n\nIndexParam\022\027\n\017collecti"
+  "on_name\030\002 \001(\t\022\022\n\nfield_name\030\003 \001(\t\022\022\n\nind"
+  "ex_name\030\004 \001(\t\0227\n\014extra_params\030\005 \003(\0132!.mi"
+  "lvus.proto.common.KeyValuePair\"\276\001\n\025Descr"
+  "ibeIndexResponse\022+\n\006status\030\001 \001(\0132\033.milvu"
+  "s.proto.common.Status\022\027\n\017collection_name"
+  "\030\002 \001(\t\022\022\n\nfield_name\030\003 \001(\t\022\022\n\nindex_name"
+  "\030\004 \001(\t\0227\n\014extra_params\030\005 \003(\0132!.milvus.pr"
+  "oto.common.KeyValuePair*@\n\017PlaceholderTy"
+  "pe\022\010\n\004NONE\020\000\022\021\n\rVECTOR_BINARY\020d\022\020\n\014VECTO"
+  "R_FLOAT\020eBCZAgithub.com/zilliztech/milvu"
+  "s-distributed/internal/proto/servicepbb\006"
+  "proto3"
   ;
 static const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable*const descriptor_table_service_5fmsg_2eproto_deps[2] = {
   &::descriptor_table_common_2eproto,
   &::descriptor_table_schema_2eproto,
 };
-static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_service_5fmsg_2eproto_sccs[16] = {
+static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_service_5fmsg_2eproto_sccs[18] = {
   &scc_info_BoolResponse_service_5fmsg_2eproto.base,
   &scc_info_CollectionDescription_service_5fmsg_2eproto.base,
   &scc_info_CollectionName_service_5fmsg_2eproto.base,
+  &scc_info_DescribeIndexResponse_service_5fmsg_2eproto.base,
   &scc_info_Hits_service_5fmsg_2eproto.base,
+  &scc_info_IndexParam_service_5fmsg_2eproto.base,
   &scc_info_IntegerListResponse_service_5fmsg_2eproto.base,
   &scc_info_IntegerRangeResponse_service_5fmsg_2eproto.base,
   &scc_info_PartitionDescription_service_5fmsg_2eproto.base,
@@ -564,10 +637,10 @@ static ::PROTOBUF_NAMESPACE_ID::internal::SCCInfoBase*const descriptor_table_ser
 static ::PROTOBUF_NAMESPACE_ID::internal::once_flag descriptor_table_service_5fmsg_2eproto_once;
 static bool descriptor_table_service_5fmsg_2eproto_initialized = false;
 const ::PROTOBUF_NAMESPACE_ID::internal::DescriptorTable descriptor_table_service_5fmsg_2eproto = {
-  &descriptor_table_service_5fmsg_2eproto_initialized, descriptor_table_protodef_service_5fmsg_2eproto, "service_msg.proto", 1716,
-  &descriptor_table_service_5fmsg_2eproto_once, descriptor_table_service_5fmsg_2eproto_sccs, descriptor_table_service_5fmsg_2eproto_deps, 16, 2,
+  &descriptor_table_service_5fmsg_2eproto_initialized, descriptor_table_protodef_service_5fmsg_2eproto, "service_msg.proto", 2046,
+  &descriptor_table_service_5fmsg_2eproto_once, descriptor_table_service_5fmsg_2eproto_sccs, descriptor_table_service_5fmsg_2eproto_deps, 18, 2,
   schemas, file_default_instances, TableStruct_service_5fmsg_2eproto::offsets,
-  file_level_metadata_service_5fmsg_2eproto, 16, file_level_enum_descriptors_service_5fmsg_2eproto, file_level_service_descriptors_service_5fmsg_2eproto,
+  file_level_metadata_service_5fmsg_2eproto, 18, file_level_enum_descriptors_service_5fmsg_2eproto, file_level_service_descriptors_service_5fmsg_2eproto,
 };
 
 // Force running AddDescriptors() at dynamic initialization time.
@@ -6291,58 +6364,1036 @@ void QueryResult::InternalSwap(QueryResult* other) {
 }
 
 
-// @@protoc_insertion_point(namespace_scope)
-}  // namespace service
-}  // namespace proto
-}  // namespace milvus
-PROTOBUF_NAMESPACE_OPEN
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::CollectionName* Arena::CreateMaybeMessage< ::milvus::proto::service::CollectionName >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::CollectionName >(arena);
-}
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::PartitionName* Arena::CreateMaybeMessage< ::milvus::proto::service::PartitionName >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::PartitionName >(arena);
-}
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::RowBatch* Arena::CreateMaybeMessage< ::milvus::proto::service::RowBatch >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::RowBatch >(arena);
+// ===================================================================
+
+void IndexParam::InitAsDefaultInstance() {
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::PlaceholderValue* Arena::CreateMaybeMessage< ::milvus::proto::service::PlaceholderValue >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::PlaceholderValue >(arena);
+class IndexParam::_Internal {
+ public:
+};
+
+void IndexParam::clear_extra_params() {
+  extra_params_.Clear();
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::PlaceholderGroup* Arena::CreateMaybeMessage< ::milvus::proto::service::PlaceholderGroup >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::PlaceholderGroup >(arena);
+IndexParam::IndexParam()
+  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:milvus.proto.service.IndexParam)
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::Query* Arena::CreateMaybeMessage< ::milvus::proto::service::Query >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::Query >(arena);
+IndexParam::IndexParam(const IndexParam& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      _internal_metadata_(nullptr),
+      extra_params_(from.extra_params_) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from.collection_name().empty()) {
+    collection_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.collection_name_);
+  }
+  field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from.field_name().empty()) {
+    field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_);
+  }
+  index_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from.index_name().empty()) {
+    index_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.index_name_);
+  }
+  // @@protoc_insertion_point(copy_constructor:milvus.proto.service.IndexParam)
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::StringResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::StringResponse >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::StringResponse >(arena);
+
+void IndexParam::SharedCtor() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_IndexParam_service_5fmsg_2eproto.base);
+  collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  index_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::BoolResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::BoolResponse >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::BoolResponse >(arena);
+
+IndexParam::~IndexParam() {
+  // @@protoc_insertion_point(destructor:milvus.proto.service.IndexParam)
+  SharedDtor();
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::StringListResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::StringListResponse >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::StringListResponse >(arena);
+
+void IndexParam::SharedDtor() {
+  collection_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  index_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::IntegerListResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::IntegerListResponse >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::IntegerListResponse >(arena);
+
+void IndexParam::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::IntegerRangeResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::IntegerRangeResponse >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::IntegerRangeResponse >(arena);
+const IndexParam& IndexParam::default_instance() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_IndexParam_service_5fmsg_2eproto.base);
+  return *internal_default_instance();
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::CollectionDescription* Arena::CreateMaybeMessage< ::milvus::proto::service::CollectionDescription >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::CollectionDescription >(arena);
+
+
+void IndexParam::Clear() {
+// @@protoc_insertion_point(message_clear_start:milvus.proto.service.IndexParam)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  extra_params_.Clear();
+  collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  index_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  _internal_metadata_.Clear();
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::PartitionDescription* Arena::CreateMaybeMessage< ::milvus::proto::service::PartitionDescription >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::PartitionDescription >(arena);
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* IndexParam::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
+    CHK_(ptr);
+    switch (tag >> 3) {
+      // string collection_name = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_collection_name(), ptr, ctx, "milvus.proto.service.IndexParam.collection_name");
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // string field_name = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_field_name(), ptr, ctx, "milvus.proto.service.IndexParam.field_name");
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // string index_name = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_index_name(), ptr, ctx, "milvus.proto.service.IndexParam.index_name");
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(add_extra_params(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 42);
+        } else goto handle_unusual;
+        continue;
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->SetLastTag(tag);
+          goto success;
+        }
+        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
+        CHK_(ptr != nullptr);
+        continue;
+      }
+    }  // switch
+  }  // while
+success:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto success;
+#undef CHK_
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::SysConfigResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::SysConfigResponse >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::SysConfigResponse >(arena);
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool IndexParam::MergePartialFromCodedStream(
+    ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+  // @@protoc_insertion_point(parse_start:milvus.proto.service.IndexParam)
+  for (;;) {
+    ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // string collection_name = 2;
+      case 2: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
+                input, this->mutable_collection_name()));
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+            this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
+            "milvus.proto.service.IndexParam.collection_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string field_name = 3;
+      case 3: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (26 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
+                input, this->mutable_field_name()));
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+            this->field_name().data(), static_cast<int>(this->field_name().length()),
+            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
+            "milvus.proto.service.IndexParam.field_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string index_name = 4;
+      case 4: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (34 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
+                input, this->mutable_index_name()));
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+            this->index_name().data(), static_cast<int>(this->index_name().length()),
+            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
+            "milvus.proto.service.IndexParam.index_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+      case 5: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (42 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
+                input, add_extra_params()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:milvus.proto.service.IndexParam)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:milvus.proto.service.IndexParam)
+  return false;
+#undef DO_
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::Hits* Arena::CreateMaybeMessage< ::milvus::proto::service::Hits >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::Hits >(arena);
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void IndexParam::SerializeWithCachedSizes(
+    ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:milvus.proto.service.IndexParam)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string collection_name = 2;
+  if (this->collection_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.IndexParam.collection_name");
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
+      2, this->collection_name(), output);
+  }
+
+  // string field_name = 3;
+  if (this->field_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->field_name().data(), static_cast<int>(this->field_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.IndexParam.field_name");
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
+      3, this->field_name(), output);
+  }
+
+  // string index_name = 4;
+  if (this->index_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->index_name().data(), static_cast<int>(this->index_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.IndexParam.index_name");
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
+      4, this->index_name(), output);
+  }
+
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->extra_params_size()); i < n; i++) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray(
+      5,
+      this->extra_params(static_cast<int>(i)),
+      output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:milvus.proto.service.IndexParam)
 }
-template<> PROTOBUF_NOINLINE ::milvus::proto::service::QueryResult* Arena::CreateMaybeMessage< ::milvus::proto::service::QueryResult >(Arena* arena) {
-  return Arena::CreateInternal< ::milvus::proto::service::QueryResult >(arena);
+
+::PROTOBUF_NAMESPACE_ID::uint8* IndexParam::InternalSerializeWithCachedSizesToArray(
+    ::PROTOBUF_NAMESPACE_ID::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:milvus.proto.service.IndexParam)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // string collection_name = 2;
+  if (this->collection_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.IndexParam.collection_name");
+    target =
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
+        2, this->collection_name(), target);
+  }
+
+  // string field_name = 3;
+  if (this->field_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->field_name().data(), static_cast<int>(this->field_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.IndexParam.field_name");
+    target =
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
+        3, this->field_name(), target);
+  }
+
+  // string index_name = 4;
+  if (this->index_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->index_name().data(), static_cast<int>(this->index_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.IndexParam.index_name");
+    target =
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
+        4, this->index_name(), target);
+  }
+
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->extra_params_size()); i < n; i++) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        5, this->extra_params(static_cast<int>(i)), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:milvus.proto.service.IndexParam)
+  return target;
+}
+
+size_t IndexParam::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:milvus.proto.service.IndexParam)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+  {
+    unsigned int count = static_cast<unsigned int>(this->extra_params_size());
+    total_size += 1UL * count;
+    for (unsigned int i = 0; i < count; i++) {
+      total_size +=
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          this->extra_params(static_cast<int>(i)));
+    }
+  }
+
+  // string collection_name = 2;
+  if (this->collection_name().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->collection_name());
+  }
+
+  // string field_name = 3;
+  if (this->field_name().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->field_name());
+  }
+
+  // string index_name = 4;
+  if (this->index_name().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->index_name());
+  }
+
+  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void IndexParam::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:milvus.proto.service.IndexParam)
+  GOOGLE_DCHECK_NE(&from, this);
+  const IndexParam* source =
+      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<IndexParam>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:milvus.proto.service.IndexParam)
+    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:milvus.proto.service.IndexParam)
+    MergeFrom(*source);
+  }
+}
+
+void IndexParam::MergeFrom(const IndexParam& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:milvus.proto.service.IndexParam)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  extra_params_.MergeFrom(from.extra_params_);
+  if (from.collection_name().size() > 0) {
+
+    collection_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.collection_name_);
+  }
+  if (from.field_name().size() > 0) {
+
+    field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_);
+  }
+  if (from.index_name().size() > 0) {
+
+    index_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.index_name_);
+  }
+}
+
+void IndexParam::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:milvus.proto.service.IndexParam)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void IndexParam::CopyFrom(const IndexParam& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:milvus.proto.service.IndexParam)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool IndexParam::IsInitialized() const {
+  return true;
+}
+
+void IndexParam::InternalSwap(IndexParam* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  CastToBase(&extra_params_)->InternalSwap(CastToBase(&other->extra_params_));
+  collection_name_.Swap(&other->collection_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  field_name_.Swap(&other->field_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  index_name_.Swap(&other->index_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata IndexParam::GetMetadata() const {
+  return GetMetadataStatic();
+}
+
+
+// ===================================================================
+
+void DescribeIndexResponse::InitAsDefaultInstance() {
+  ::milvus::proto::service::_DescribeIndexResponse_default_instance_._instance.get_mutable()->status_ = const_cast< ::milvus::proto::common::Status*>(
+      ::milvus::proto::common::Status::internal_default_instance());
+}
+class DescribeIndexResponse::_Internal {
+ public:
+  static const ::milvus::proto::common::Status& status(const DescribeIndexResponse* msg);
+};
+
+const ::milvus::proto::common::Status&
+DescribeIndexResponse::_Internal::status(const DescribeIndexResponse* msg) {
+  return *msg->status_;
+}
+void DescribeIndexResponse::clear_status() {
+  if (GetArenaNoVirtual() == nullptr && status_ != nullptr) {
+    delete status_;
+  }
+  status_ = nullptr;
+}
+void DescribeIndexResponse::clear_extra_params() {
+  extra_params_.Clear();
+}
+DescribeIndexResponse::DescribeIndexResponse()
+  : ::PROTOBUF_NAMESPACE_ID::Message(), _internal_metadata_(nullptr) {
+  SharedCtor();
+  // @@protoc_insertion_point(constructor:milvus.proto.service.DescribeIndexResponse)
+}
+DescribeIndexResponse::DescribeIndexResponse(const DescribeIndexResponse& from)
+  : ::PROTOBUF_NAMESPACE_ID::Message(),
+      _internal_metadata_(nullptr),
+      extra_params_(from.extra_params_) {
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from.collection_name().empty()) {
+    collection_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.collection_name_);
+  }
+  field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from.field_name().empty()) {
+    field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_);
+  }
+  index_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (!from.index_name().empty()) {
+    index_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.index_name_);
+  }
+  if (from.has_status()) {
+    status_ = new ::milvus::proto::common::Status(*from.status_);
+  } else {
+    status_ = nullptr;
+  }
+  // @@protoc_insertion_point(copy_constructor:milvus.proto.service.DescribeIndexResponse)
+}
+
+void DescribeIndexResponse::SharedCtor() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_DescribeIndexResponse_service_5fmsg_2eproto.base);
+  collection_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  index_name_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  status_ = nullptr;
+}
+
+DescribeIndexResponse::~DescribeIndexResponse() {
+  // @@protoc_insertion_point(destructor:milvus.proto.service.DescribeIndexResponse)
+  SharedDtor();
+}
+
+void DescribeIndexResponse::SharedDtor() {
+  collection_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  index_name_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (this != internal_default_instance()) delete status_;
+}
+
+void DescribeIndexResponse::SetCachedSize(int size) const {
+  _cached_size_.Set(size);
+}
+const DescribeIndexResponse& DescribeIndexResponse::default_instance() {
+  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&::scc_info_DescribeIndexResponse_service_5fmsg_2eproto.base);
+  return *internal_default_instance();
+}
+
+
+void DescribeIndexResponse::Clear() {
+// @@protoc_insertion_point(message_clear_start:milvus.proto.service.DescribeIndexResponse)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  extra_params_.Clear();
+  collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  index_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+  if (GetArenaNoVirtual() == nullptr && status_ != nullptr) {
+    delete status_;
+  }
+  status_ = nullptr;
+  _internal_metadata_.Clear();
+}
+
+#if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+const char* DescribeIndexResponse::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
+#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
+  while (!ctx->Done(&ptr)) {
+    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
+    CHK_(ptr);
+    switch (tag >> 3) {
+      // .milvus.proto.common.Status status = 1;
+      case 1:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
+          ptr = ctx->ParseMessage(mutable_status(), ptr);
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // string collection_name = 2;
+      case 2:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_collection_name(), ptr, ctx, "milvus.proto.service.DescribeIndexResponse.collection_name");
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // string field_name = 3;
+      case 3:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_field_name(), ptr, ctx, "milvus.proto.service.DescribeIndexResponse.field_name");
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // string index_name = 4;
+      case 4:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
+          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParserUTF8(mutable_index_name(), ptr, ctx, "milvus.proto.service.DescribeIndexResponse.index_name");
+          CHK_(ptr);
+        } else goto handle_unusual;
+        continue;
+      // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+      case 5:
+        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
+          ptr -= 1;
+          do {
+            ptr += 1;
+            ptr = ctx->ParseMessage(add_extra_params(), ptr);
+            CHK_(ptr);
+            if (!ctx->DataAvailable(ptr)) break;
+          } while (::PROTOBUF_NAMESPACE_ID::internal::UnalignedLoad<::PROTOBUF_NAMESPACE_ID::uint8>(ptr) == 42);
+        } else goto handle_unusual;
+        continue;
+      default: {
+      handle_unusual:
+        if ((tag & 7) == 4 || tag == 0) {
+          ctx->SetLastTag(tag);
+          goto success;
+        }
+        ptr = UnknownFieldParse(tag, &_internal_metadata_, ptr, ctx);
+        CHK_(ptr != nullptr);
+        continue;
+      }
+    }  // switch
+  }  // while
+success:
+  return ptr;
+failure:
+  ptr = nullptr;
+  goto success;
+#undef CHK_
+}
+#else  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+bool DescribeIndexResponse::MergePartialFromCodedStream(
+    ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) {
+#define DO_(EXPRESSION) if (!PROTOBUF_PREDICT_TRUE(EXPRESSION)) goto failure
+  ::PROTOBUF_NAMESPACE_ID::uint32 tag;
+  // @@protoc_insertion_point(parse_start:milvus.proto.service.DescribeIndexResponse)
+  for (;;) {
+    ::std::pair<::PROTOBUF_NAMESPACE_ID::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
+    tag = p.first;
+    if (!p.second) goto handle_unusual;
+    switch (::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::GetTagFieldNumber(tag)) {
+      // .milvus.proto.common.Status status = 1;
+      case 1: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (10 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
+               input, mutable_status()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string collection_name = 2;
+      case 2: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (18 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
+                input, this->mutable_collection_name()));
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+            this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
+            "milvus.proto.service.DescribeIndexResponse.collection_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string field_name = 3;
+      case 3: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (26 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
+                input, this->mutable_field_name()));
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+            this->field_name().data(), static_cast<int>(this->field_name().length()),
+            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
+            "milvus.proto.service.DescribeIndexResponse.field_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // string index_name = 4;
+      case 4: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (34 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadString(
+                input, this->mutable_index_name()));
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+            this->index_name().data(), static_cast<int>(this->index_name().length()),
+            ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::PARSE,
+            "milvus.proto.service.DescribeIndexResponse.index_name"));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+      case 5: {
+        if (static_cast< ::PROTOBUF_NAMESPACE_ID::uint8>(tag) == (42 & 0xFF)) {
+          DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::ReadMessage(
+                input, add_extra_params()));
+        } else {
+          goto handle_unusual;
+        }
+        break;
+      }
+
+      default: {
+      handle_unusual:
+        if (tag == 0) {
+          goto success;
+        }
+        DO_(::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SkipField(
+              input, tag, _internal_metadata_.mutable_unknown_fields()));
+        break;
+      }
+    }
+  }
+success:
+  // @@protoc_insertion_point(parse_success:milvus.proto.service.DescribeIndexResponse)
+  return true;
+failure:
+  // @@protoc_insertion_point(parse_failure:milvus.proto.service.DescribeIndexResponse)
+  return false;
+#undef DO_
+}
+#endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+
+void DescribeIndexResponse::SerializeWithCachedSizes(
+    ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const {
+  // @@protoc_insertion_point(serialize_start:milvus.proto.service.DescribeIndexResponse)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .milvus.proto.common.Status status = 1;
+  if (this->has_status()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray(
+      1, _Internal::status(this), output);
+  }
+
+  // string collection_name = 2;
+  if (this->collection_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexResponse.collection_name");
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
+      2, this->collection_name(), output);
+  }
+
+  // string field_name = 3;
+  if (this->field_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->field_name().data(), static_cast<int>(this->field_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexResponse.field_name");
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
+      3, this->field_name(), output);
+  }
+
+  // string index_name = 4;
+  if (this->index_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->index_name().data(), static_cast<int>(this->index_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexResponse.index_name");
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringMaybeAliased(
+      4, this->index_name(), output);
+  }
+
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->extra_params_size()); i < n; i++) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteMessageMaybeToArray(
+      5,
+      this->extra_params(static_cast<int>(i)),
+      output);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFields(
+        _internal_metadata_.unknown_fields(), output);
+  }
+  // @@protoc_insertion_point(serialize_end:milvus.proto.service.DescribeIndexResponse)
+}
+
+::PROTOBUF_NAMESPACE_ID::uint8* DescribeIndexResponse::InternalSerializeWithCachedSizesToArray(
+    ::PROTOBUF_NAMESPACE_ID::uint8* target) const {
+  // @@protoc_insertion_point(serialize_to_array_start:milvus.proto.service.DescribeIndexResponse)
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  // .milvus.proto.common.Status status = 1;
+  if (this->has_status()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        1, _Internal::status(this), target);
+  }
+
+  // string collection_name = 2;
+  if (this->collection_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->collection_name().data(), static_cast<int>(this->collection_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexResponse.collection_name");
+    target =
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
+        2, this->collection_name(), target);
+  }
+
+  // string field_name = 3;
+  if (this->field_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->field_name().data(), static_cast<int>(this->field_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexResponse.field_name");
+    target =
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
+        3, this->field_name(), target);
+  }
+
+  // string index_name = 4;
+  if (this->index_name().size() > 0) {
+    ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::VerifyUtf8String(
+      this->index_name().data(), static_cast<int>(this->index_name().length()),
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::SERIALIZE,
+      "milvus.proto.service.DescribeIndexResponse.index_name");
+    target =
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::WriteStringToArray(
+        4, this->index_name(), target);
+  }
+
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+  for (unsigned int i = 0,
+      n = static_cast<unsigned int>(this->extra_params_size()); i < n; i++) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::
+      InternalWriteMessageToArray(
+        5, this->extra_params(static_cast<int>(i)), target);
+  }
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    target = ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::SerializeUnknownFieldsToArray(
+        _internal_metadata_.unknown_fields(), target);
+  }
+  // @@protoc_insertion_point(serialize_to_array_end:milvus.proto.service.DescribeIndexResponse)
+  return target;
+}
+
+size_t DescribeIndexResponse::ByteSizeLong() const {
+// @@protoc_insertion_point(message_byte_size_start:milvus.proto.service.DescribeIndexResponse)
+  size_t total_size = 0;
+
+  if (_internal_metadata_.have_unknown_fields()) {
+    total_size +=
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormat::ComputeUnknownFieldsSize(
+        _internal_metadata_.unknown_fields());
+  }
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  // Prevent compiler warnings about cached_has_bits being unused
+  (void) cached_has_bits;
+
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+  {
+    unsigned int count = static_cast<unsigned int>(this->extra_params_size());
+    total_size += 1UL * count;
+    for (unsigned int i = 0; i < count; i++) {
+      total_size +=
+        ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+          this->extra_params(static_cast<int>(i)));
+    }
+  }
+
+  // string collection_name = 2;
+  if (this->collection_name().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->collection_name());
+  }
+
+  // string field_name = 3;
+  if (this->field_name().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->field_name());
+  }
+
+  // string index_name = 4;
+  if (this->index_name().size() > 0) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::StringSize(
+        this->index_name());
+  }
+
+  // .milvus.proto.common.Status status = 1;
+  if (this->has_status()) {
+    total_size += 1 +
+      ::PROTOBUF_NAMESPACE_ID::internal::WireFormatLite::MessageSize(
+        *status_);
+  }
+
+  int cached_size = ::PROTOBUF_NAMESPACE_ID::internal::ToCachedSize(total_size);
+  SetCachedSize(cached_size);
+  return total_size;
+}
+
+void DescribeIndexResponse::MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_merge_from_start:milvus.proto.service.DescribeIndexResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  const DescribeIndexResponse* source =
+      ::PROTOBUF_NAMESPACE_ID::DynamicCastToGenerated<DescribeIndexResponse>(
+          &from);
+  if (source == nullptr) {
+  // @@protoc_insertion_point(generalized_merge_from_cast_fail:milvus.proto.service.DescribeIndexResponse)
+    ::PROTOBUF_NAMESPACE_ID::internal::ReflectionOps::Merge(from, this);
+  } else {
+  // @@protoc_insertion_point(generalized_merge_from_cast_success:milvus.proto.service.DescribeIndexResponse)
+    MergeFrom(*source);
+  }
+}
+
+void DescribeIndexResponse::MergeFrom(const DescribeIndexResponse& from) {
+// @@protoc_insertion_point(class_specific_merge_from_start:milvus.proto.service.DescribeIndexResponse)
+  GOOGLE_DCHECK_NE(&from, this);
+  _internal_metadata_.MergeFrom(from._internal_metadata_);
+  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
+  (void) cached_has_bits;
+
+  extra_params_.MergeFrom(from.extra_params_);
+  if (from.collection_name().size() > 0) {
+
+    collection_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.collection_name_);
+  }
+  if (from.field_name().size() > 0) {
+
+    field_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.field_name_);
+  }
+  if (from.index_name().size() > 0) {
+
+    index_name_.AssignWithDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), from.index_name_);
+  }
+  if (from.has_status()) {
+    mutable_status()->::milvus::proto::common::Status::MergeFrom(from.status());
+  }
+}
+
+void DescribeIndexResponse::CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) {
+// @@protoc_insertion_point(generalized_copy_from_start:milvus.proto.service.DescribeIndexResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+void DescribeIndexResponse::CopyFrom(const DescribeIndexResponse& from) {
+// @@protoc_insertion_point(class_specific_copy_from_start:milvus.proto.service.DescribeIndexResponse)
+  if (&from == this) return;
+  Clear();
+  MergeFrom(from);
+}
+
+bool DescribeIndexResponse::IsInitialized() const {
+  return true;
+}
+
+void DescribeIndexResponse::InternalSwap(DescribeIndexResponse* other) {
+  using std::swap;
+  _internal_metadata_.Swap(&other->_internal_metadata_);
+  CastToBase(&extra_params_)->InternalSwap(CastToBase(&other->extra_params_));
+  collection_name_.Swap(&other->collection_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  field_name_.Swap(&other->field_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  index_name_.Swap(&other->index_name_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+    GetArenaNoVirtual());
+  swap(status_, other->status_);
+}
+
+::PROTOBUF_NAMESPACE_ID::Metadata DescribeIndexResponse::GetMetadata() const {
+  return GetMetadataStatic();
+}
+
+
+// @@protoc_insertion_point(namespace_scope)
+}  // namespace service
+}  // namespace proto
+}  // namespace milvus
+PROTOBUF_NAMESPACE_OPEN
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::CollectionName* Arena::CreateMaybeMessage< ::milvus::proto::service::CollectionName >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::CollectionName >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::PartitionName* Arena::CreateMaybeMessage< ::milvus::proto::service::PartitionName >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::PartitionName >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::RowBatch* Arena::CreateMaybeMessage< ::milvus::proto::service::RowBatch >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::RowBatch >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::PlaceholderValue* Arena::CreateMaybeMessage< ::milvus::proto::service::PlaceholderValue >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::PlaceholderValue >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::PlaceholderGroup* Arena::CreateMaybeMessage< ::milvus::proto::service::PlaceholderGroup >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::PlaceholderGroup >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::Query* Arena::CreateMaybeMessage< ::milvus::proto::service::Query >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::Query >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::StringResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::StringResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::StringResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::BoolResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::BoolResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::BoolResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::StringListResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::StringListResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::StringListResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::IntegerListResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::IntegerListResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::IntegerListResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::IntegerRangeResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::IntegerRangeResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::IntegerRangeResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::CollectionDescription* Arena::CreateMaybeMessage< ::milvus::proto::service::CollectionDescription >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::CollectionDescription >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::PartitionDescription* Arena::CreateMaybeMessage< ::milvus::proto::service::PartitionDescription >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::PartitionDescription >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::SysConfigResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::SysConfigResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::SysConfigResponse >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::Hits* Arena::CreateMaybeMessage< ::milvus::proto::service::Hits >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::Hits >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::QueryResult* Arena::CreateMaybeMessage< ::milvus::proto::service::QueryResult >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::QueryResult >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::IndexParam* Arena::CreateMaybeMessage< ::milvus::proto::service::IndexParam >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::IndexParam >(arena);
+}
+template<> PROTOBUF_NOINLINE ::milvus::proto::service::DescribeIndexResponse* Arena::CreateMaybeMessage< ::milvus::proto::service::DescribeIndexResponse >(Arena* arena) {
+  return Arena::CreateInternal< ::milvus::proto::service::DescribeIndexResponse >(arena);
 }
 PROTOBUF_NAMESPACE_CLOSE
 
diff --git a/internal/core/src/pb/service_msg.pb.h b/internal/core/src/pb/service_msg.pb.h
index fbcb431647cf07d1f10e408b2ea6c82da8695e64..bfd3a3744fd68e5bb31d067f13b1bdfb323563d1 100644
--- a/internal/core/src/pb/service_msg.pb.h
+++ b/internal/core/src/pb/service_msg.pb.h
@@ -50,7 +50,7 @@ struct TableStruct_service_5fmsg_2eproto {
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::PROTOBUF_NAMESPACE_ID::internal::AuxillaryParseTableField aux[]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
-  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[16]
+  static const ::PROTOBUF_NAMESPACE_ID::internal::ParseTable schema[18]
     PROTOBUF_SECTION_VARIABLE(protodesc_cold);
   static const ::PROTOBUF_NAMESPACE_ID::internal::FieldMetadata field_metadata[];
   static const ::PROTOBUF_NAMESPACE_ID::internal::SerializationTable serialization_table[];
@@ -69,9 +69,15 @@ extern CollectionDescriptionDefaultTypeInternal _CollectionDescription_default_i
 class CollectionName;
 class CollectionNameDefaultTypeInternal;
 extern CollectionNameDefaultTypeInternal _CollectionName_default_instance_;
+class DescribeIndexResponse;
+class DescribeIndexResponseDefaultTypeInternal;
+extern DescribeIndexResponseDefaultTypeInternal _DescribeIndexResponse_default_instance_;
 class Hits;
 class HitsDefaultTypeInternal;
 extern HitsDefaultTypeInternal _Hits_default_instance_;
+class IndexParam;
+class IndexParamDefaultTypeInternal;
+extern IndexParamDefaultTypeInternal _IndexParam_default_instance_;
 class IntegerListResponse;
 class IntegerListResponseDefaultTypeInternal;
 extern IntegerListResponseDefaultTypeInternal _IntegerListResponse_default_instance_;
@@ -115,7 +121,9 @@ PROTOBUF_NAMESPACE_OPEN
 template<> ::milvus::proto::service::BoolResponse* Arena::CreateMaybeMessage<::milvus::proto::service::BoolResponse>(Arena*);
 template<> ::milvus::proto::service::CollectionDescription* Arena::CreateMaybeMessage<::milvus::proto::service::CollectionDescription>(Arena*);
 template<> ::milvus::proto::service::CollectionName* Arena::CreateMaybeMessage<::milvus::proto::service::CollectionName>(Arena*);
+template<> ::milvus::proto::service::DescribeIndexResponse* Arena::CreateMaybeMessage<::milvus::proto::service::DescribeIndexResponse>(Arena*);
 template<> ::milvus::proto::service::Hits* Arena::CreateMaybeMessage<::milvus::proto::service::Hits>(Arena*);
+template<> ::milvus::proto::service::IndexParam* Arena::CreateMaybeMessage<::milvus::proto::service::IndexParam>(Arena*);
 template<> ::milvus::proto::service::IntegerListResponse* Arena::CreateMaybeMessage<::milvus::proto::service::IntegerListResponse>(Arena*);
 template<> ::milvus::proto::service::IntegerRangeResponse* Arena::CreateMaybeMessage<::milvus::proto::service::IntegerRangeResponse>(Arena*);
 template<> ::milvus::proto::service::PartitionDescription* Arena::CreateMaybeMessage<::milvus::proto::service::PartitionDescription>(Arena*);
@@ -2652,6 +2660,368 @@ class QueryResult :
   mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
   friend struct ::TableStruct_service_5fmsg_2eproto;
 };
+// -------------------------------------------------------------------
+
+class IndexParam :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.service.IndexParam) */ {
+ public:
+  IndexParam();
+  virtual ~IndexParam();
+
+  IndexParam(const IndexParam& from);
+  IndexParam(IndexParam&& from) noexcept
+    : IndexParam() {
+    *this = ::std::move(from);
+  }
+
+  inline IndexParam& operator=(const IndexParam& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline IndexParam& operator=(IndexParam&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return GetMetadataStatic().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return GetMetadataStatic().reflection;
+  }
+  static const IndexParam& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const IndexParam* internal_default_instance() {
+    return reinterpret_cast<const IndexParam*>(
+               &_IndexParam_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    16;
+
+  friend void swap(IndexParam& a, IndexParam& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(IndexParam* other) {
+    if (other == this) return;
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline IndexParam* New() const final {
+    return CreateMaybeMessage<IndexParam>(nullptr);
+  }
+
+  IndexParam* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+    return CreateMaybeMessage<IndexParam>(arena);
+  }
+  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
+  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
+  void CopyFrom(const IndexParam& from);
+  void MergeFrom(const IndexParam& from);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  #else
+  bool MergePartialFromCodedStream(
+      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
+  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  void SerializeWithCachedSizes(
+      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
+  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
+      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  inline void SharedCtor();
+  inline void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(IndexParam* other);
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "milvus.proto.service.IndexParam";
+  }
+  private:
+  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
+    return nullptr;
+  }
+  inline void* MaybeArenaPtr() const {
+    return nullptr;
+  }
+  public:
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+  private:
+  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
+    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_service_5fmsg_2eproto);
+    return ::descriptor_table_service_5fmsg_2eproto.file_level_metadata[kIndexInFileMessages];
+  }
+
+  public:
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kExtraParamsFieldNumber = 5,
+    kCollectionNameFieldNumber = 2,
+    kFieldNameFieldNumber = 3,
+    kIndexNameFieldNumber = 4,
+  };
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+  int extra_params_size() const;
+  void clear_extra_params();
+  ::milvus::proto::common::KeyValuePair* mutable_extra_params(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >*
+      mutable_extra_params();
+  const ::milvus::proto::common::KeyValuePair& extra_params(int index) const;
+  ::milvus::proto::common::KeyValuePair* add_extra_params();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >&
+      extra_params() const;
+
+  // string collection_name = 2;
+  void clear_collection_name();
+  const std::string& collection_name() const;
+  void set_collection_name(const std::string& value);
+  void set_collection_name(std::string&& value);
+  void set_collection_name(const char* value);
+  void set_collection_name(const char* value, size_t size);
+  std::string* mutable_collection_name();
+  std::string* release_collection_name();
+  void set_allocated_collection_name(std::string* collection_name);
+
+  // string field_name = 3;
+  void clear_field_name();
+  const std::string& field_name() const;
+  void set_field_name(const std::string& value);
+  void set_field_name(std::string&& value);
+  void set_field_name(const char* value);
+  void set_field_name(const char* value, size_t size);
+  std::string* mutable_field_name();
+  std::string* release_field_name();
+  void set_allocated_field_name(std::string* field_name);
+
+  // string index_name = 4;
+  void clear_index_name();
+  const std::string& index_name() const;
+  void set_index_name(const std::string& value);
+  void set_index_name(std::string&& value);
+  void set_index_name(const char* value);
+  void set_index_name(const char* value, size_t size);
+  std::string* mutable_index_name();
+  std::string* release_index_name();
+  void set_allocated_index_name(std::string* index_name);
+
+  // @@protoc_insertion_point(class_scope:milvus.proto.service.IndexParam)
+ private:
+  class _Internal;
+
+  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair > extra_params_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr collection_name_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr field_name_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr index_name_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_service_5fmsg_2eproto;
+};
+// -------------------------------------------------------------------
+
+class DescribeIndexResponse :
+    public ::PROTOBUF_NAMESPACE_ID::Message /* @@protoc_insertion_point(class_definition:milvus.proto.service.DescribeIndexResponse) */ {
+ public:
+  DescribeIndexResponse();
+  virtual ~DescribeIndexResponse();
+
+  DescribeIndexResponse(const DescribeIndexResponse& from);
+  DescribeIndexResponse(DescribeIndexResponse&& from) noexcept
+    : DescribeIndexResponse() {
+    *this = ::std::move(from);
+  }
+
+  inline DescribeIndexResponse& operator=(const DescribeIndexResponse& from) {
+    CopyFrom(from);
+    return *this;
+  }
+  inline DescribeIndexResponse& operator=(DescribeIndexResponse&& from) noexcept {
+    if (GetArenaNoVirtual() == from.GetArenaNoVirtual()) {
+      if (this != &from) InternalSwap(&from);
+    } else {
+      CopyFrom(from);
+    }
+    return *this;
+  }
+
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* descriptor() {
+    return GetDescriptor();
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Descriptor* GetDescriptor() {
+    return GetMetadataStatic().descriptor;
+  }
+  static const ::PROTOBUF_NAMESPACE_ID::Reflection* GetReflection() {
+    return GetMetadataStatic().reflection;
+  }
+  static const DescribeIndexResponse& default_instance();
+
+  static void InitAsDefaultInstance();  // FOR INTERNAL USE ONLY
+  static inline const DescribeIndexResponse* internal_default_instance() {
+    return reinterpret_cast<const DescribeIndexResponse*>(
+               &_DescribeIndexResponse_default_instance_);
+  }
+  static constexpr int kIndexInFileMessages =
+    17;
+
+  friend void swap(DescribeIndexResponse& a, DescribeIndexResponse& b) {
+    a.Swap(&b);
+  }
+  inline void Swap(DescribeIndexResponse* other) {
+    if (other == this) return;
+    InternalSwap(other);
+  }
+
+  // implements Message ----------------------------------------------
+
+  inline DescribeIndexResponse* New() const final {
+    return CreateMaybeMessage<DescribeIndexResponse>(nullptr);
+  }
+
+  DescribeIndexResponse* New(::PROTOBUF_NAMESPACE_ID::Arena* arena) const final {
+    return CreateMaybeMessage<DescribeIndexResponse>(arena);
+  }
+  void CopyFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
+  void MergeFrom(const ::PROTOBUF_NAMESPACE_ID::Message& from) final;
+  void CopyFrom(const DescribeIndexResponse& from);
+  void MergeFrom(const DescribeIndexResponse& from);
+  PROTOBUF_ATTRIBUTE_REINITIALIZES void Clear() final;
+  bool IsInitialized() const final;
+
+  size_t ByteSizeLong() const final;
+  #if GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  const char* _InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) final;
+  #else
+  bool MergePartialFromCodedStream(
+      ::PROTOBUF_NAMESPACE_ID::io::CodedInputStream* input) final;
+  #endif  // GOOGLE_PROTOBUF_ENABLE_EXPERIMENTAL_PARSER
+  void SerializeWithCachedSizes(
+      ::PROTOBUF_NAMESPACE_ID::io::CodedOutputStream* output) const final;
+  ::PROTOBUF_NAMESPACE_ID::uint8* InternalSerializeWithCachedSizesToArray(
+      ::PROTOBUF_NAMESPACE_ID::uint8* target) const final;
+  int GetCachedSize() const final { return _cached_size_.Get(); }
+
+  private:
+  inline void SharedCtor();
+  inline void SharedDtor();
+  void SetCachedSize(int size) const final;
+  void InternalSwap(DescribeIndexResponse* other);
+  friend class ::PROTOBUF_NAMESPACE_ID::internal::AnyMetadata;
+  static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() {
+    return "milvus.proto.service.DescribeIndexResponse";
+  }
+  private:
+  inline ::PROTOBUF_NAMESPACE_ID::Arena* GetArenaNoVirtual() const {
+    return nullptr;
+  }
+  inline void* MaybeArenaPtr() const {
+    return nullptr;
+  }
+  public:
+
+  ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadata() const final;
+  private:
+  static ::PROTOBUF_NAMESPACE_ID::Metadata GetMetadataStatic() {
+    ::PROTOBUF_NAMESPACE_ID::internal::AssignDescriptors(&::descriptor_table_service_5fmsg_2eproto);
+    return ::descriptor_table_service_5fmsg_2eproto.file_level_metadata[kIndexInFileMessages];
+  }
+
+  public:
+
+  // nested types ----------------------------------------------------
+
+  // accessors -------------------------------------------------------
+
+  enum : int {
+    kExtraParamsFieldNumber = 5,
+    kCollectionNameFieldNumber = 2,
+    kFieldNameFieldNumber = 3,
+    kIndexNameFieldNumber = 4,
+    kStatusFieldNumber = 1,
+  };
+  // repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+  int extra_params_size() const;
+  void clear_extra_params();
+  ::milvus::proto::common::KeyValuePair* mutable_extra_params(int index);
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >*
+      mutable_extra_params();
+  const ::milvus::proto::common::KeyValuePair& extra_params(int index) const;
+  ::milvus::proto::common::KeyValuePair* add_extra_params();
+  const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >&
+      extra_params() const;
+
+  // string collection_name = 2;
+  void clear_collection_name();
+  const std::string& collection_name() const;
+  void set_collection_name(const std::string& value);
+  void set_collection_name(std::string&& value);
+  void set_collection_name(const char* value);
+  void set_collection_name(const char* value, size_t size);
+  std::string* mutable_collection_name();
+  std::string* release_collection_name();
+  void set_allocated_collection_name(std::string* collection_name);
+
+  // string field_name = 3;
+  void clear_field_name();
+  const std::string& field_name() const;
+  void set_field_name(const std::string& value);
+  void set_field_name(std::string&& value);
+  void set_field_name(const char* value);
+  void set_field_name(const char* value, size_t size);
+  std::string* mutable_field_name();
+  std::string* release_field_name();
+  void set_allocated_field_name(std::string* field_name);
+
+  // string index_name = 4;
+  void clear_index_name();
+  const std::string& index_name() const;
+  void set_index_name(const std::string& value);
+  void set_index_name(std::string&& value);
+  void set_index_name(const char* value);
+  void set_index_name(const char* value, size_t size);
+  std::string* mutable_index_name();
+  std::string* release_index_name();
+  void set_allocated_index_name(std::string* index_name);
+
+  // .milvus.proto.common.Status status = 1;
+  bool has_status() const;
+  void clear_status();
+  const ::milvus::proto::common::Status& status() const;
+  ::milvus::proto::common::Status* release_status();
+  ::milvus::proto::common::Status* mutable_status();
+  void set_allocated_status(::milvus::proto::common::Status* status);
+
+  // @@protoc_insertion_point(class_scope:milvus.proto.service.DescribeIndexResponse)
+ private:
+  class _Internal;
+
+  ::PROTOBUF_NAMESPACE_ID::internal::InternalMetadataWithArena _internal_metadata_;
+  ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair > extra_params_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr collection_name_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr field_name_;
+  ::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr index_name_;
+  ::milvus::proto::common::Status* status_;
+  mutable ::PROTOBUF_NAMESPACE_ID::internal::CachedSize _cached_size_;
+  friend struct ::TableStruct_service_5fmsg_2eproto;
+};
 // ===================================================================
 
 
@@ -4476,6 +4846,419 @@ QueryResult::mutable_hits() {
   return &hits_;
 }
 
+// -------------------------------------------------------------------
+
+// IndexParam
+
+// string collection_name = 2;
+inline void IndexParam::clear_collection_name() {
+  collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline const std::string& IndexParam::collection_name() const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.IndexParam.collection_name)
+  return collection_name_.GetNoArena();
+}
+inline void IndexParam::set_collection_name(const std::string& value) {
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:milvus.proto.service.IndexParam.collection_name)
+}
+inline void IndexParam::set_collection_name(std::string&& value) {
+  
+  collection_name_.SetNoArena(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.IndexParam.collection_name)
+}
+inline void IndexParam::set_collection_name(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:milvus.proto.service.IndexParam.collection_name)
+}
+inline void IndexParam::set_collection_name(const char* value, size_t size) {
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.IndexParam.collection_name)
+}
+inline std::string* IndexParam::mutable_collection_name() {
+  
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.IndexParam.collection_name)
+  return collection_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline std::string* IndexParam::release_collection_name() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.IndexParam.collection_name)
+  
+  return collection_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline void IndexParam::set_allocated_collection_name(std::string* collection_name) {
+  if (collection_name != nullptr) {
+    
+  } else {
+    
+  }
+  collection_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), collection_name);
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.IndexParam.collection_name)
+}
+
+// string field_name = 3;
+inline void IndexParam::clear_field_name() {
+  field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline const std::string& IndexParam::field_name() const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.IndexParam.field_name)
+  return field_name_.GetNoArena();
+}
+inline void IndexParam::set_field_name(const std::string& value) {
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:milvus.proto.service.IndexParam.field_name)
+}
+inline void IndexParam::set_field_name(std::string&& value) {
+  
+  field_name_.SetNoArena(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.IndexParam.field_name)
+}
+inline void IndexParam::set_field_name(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:milvus.proto.service.IndexParam.field_name)
+}
+inline void IndexParam::set_field_name(const char* value, size_t size) {
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.IndexParam.field_name)
+}
+inline std::string* IndexParam::mutable_field_name() {
+  
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.IndexParam.field_name)
+  return field_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline std::string* IndexParam::release_field_name() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.IndexParam.field_name)
+  
+  return field_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline void IndexParam::set_allocated_field_name(std::string* field_name) {
+  if (field_name != nullptr) {
+    
+  } else {
+    
+  }
+  field_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), field_name);
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.IndexParam.field_name)
+}
+
+// string index_name = 4;
+inline void IndexParam::clear_index_name() {
+  index_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline const std::string& IndexParam::index_name() const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.IndexParam.index_name)
+  return index_name_.GetNoArena();
+}
+inline void IndexParam::set_index_name(const std::string& value) {
+  
+  index_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:milvus.proto.service.IndexParam.index_name)
+}
+inline void IndexParam::set_index_name(std::string&& value) {
+  
+  index_name_.SetNoArena(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.IndexParam.index_name)
+}
+inline void IndexParam::set_index_name(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  index_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:milvus.proto.service.IndexParam.index_name)
+}
+inline void IndexParam::set_index_name(const char* value, size_t size) {
+  
+  index_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.IndexParam.index_name)
+}
+inline std::string* IndexParam::mutable_index_name() {
+  
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.IndexParam.index_name)
+  return index_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline std::string* IndexParam::release_index_name() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.IndexParam.index_name)
+  
+  return index_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline void IndexParam::set_allocated_index_name(std::string* index_name) {
+  if (index_name != nullptr) {
+    
+  } else {
+    
+  }
+  index_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), index_name);
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.IndexParam.index_name)
+}
+
+// repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+inline int IndexParam::extra_params_size() const {
+  return extra_params_.size();
+}
+inline ::milvus::proto::common::KeyValuePair* IndexParam::mutable_extra_params(int index) {
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.IndexParam.extra_params)
+  return extra_params_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >*
+IndexParam::mutable_extra_params() {
+  // @@protoc_insertion_point(field_mutable_list:milvus.proto.service.IndexParam.extra_params)
+  return &extra_params_;
+}
+inline const ::milvus::proto::common::KeyValuePair& IndexParam::extra_params(int index) const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.IndexParam.extra_params)
+  return extra_params_.Get(index);
+}
+inline ::milvus::proto::common::KeyValuePair* IndexParam::add_extra_params() {
+  // @@protoc_insertion_point(field_add:milvus.proto.service.IndexParam.extra_params)
+  return extra_params_.Add();
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >&
+IndexParam::extra_params() const {
+  // @@protoc_insertion_point(field_list:milvus.proto.service.IndexParam.extra_params)
+  return extra_params_;
+}
+
+// -------------------------------------------------------------------
+
+// DescribeIndexResponse
+
+// .milvus.proto.common.Status status = 1;
+inline bool DescribeIndexResponse::has_status() const {
+  return this != internal_default_instance() && status_ != nullptr;
+}
+inline const ::milvus::proto::common::Status& DescribeIndexResponse::status() const {
+  const ::milvus::proto::common::Status* p = status_;
+  // @@protoc_insertion_point(field_get:milvus.proto.service.DescribeIndexResponse.status)
+  return p != nullptr ? *p : *reinterpret_cast<const ::milvus::proto::common::Status*>(
+      &::milvus::proto::common::_Status_default_instance_);
+}
+inline ::milvus::proto::common::Status* DescribeIndexResponse::release_status() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.DescribeIndexResponse.status)
+  
+  ::milvus::proto::common::Status* temp = status_;
+  status_ = nullptr;
+  return temp;
+}
+inline ::milvus::proto::common::Status* DescribeIndexResponse::mutable_status() {
+  
+  if (status_ == nullptr) {
+    auto* p = CreateMaybeMessage<::milvus::proto::common::Status>(GetArenaNoVirtual());
+    status_ = p;
+  }
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.DescribeIndexResponse.status)
+  return status_;
+}
+inline void DescribeIndexResponse::set_allocated_status(::milvus::proto::common::Status* status) {
+  ::PROTOBUF_NAMESPACE_ID::Arena* message_arena = GetArenaNoVirtual();
+  if (message_arena == nullptr) {
+    delete reinterpret_cast< ::PROTOBUF_NAMESPACE_ID::MessageLite*>(status_);
+  }
+  if (status) {
+    ::PROTOBUF_NAMESPACE_ID::Arena* submessage_arena = nullptr;
+    if (message_arena != submessage_arena) {
+      status = ::PROTOBUF_NAMESPACE_ID::internal::GetOwnedMessage(
+          message_arena, status, submessage_arena);
+    }
+    
+  } else {
+    
+  }
+  status_ = status;
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.DescribeIndexResponse.status)
+}
+
+// string collection_name = 2;
+inline void DescribeIndexResponse::clear_collection_name() {
+  collection_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline const std::string& DescribeIndexResponse::collection_name() const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.DescribeIndexResponse.collection_name)
+  return collection_name_.GetNoArena();
+}
+inline void DescribeIndexResponse::set_collection_name(const std::string& value) {
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:milvus.proto.service.DescribeIndexResponse.collection_name)
+}
+inline void DescribeIndexResponse::set_collection_name(std::string&& value) {
+  
+  collection_name_.SetNoArena(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.DescribeIndexResponse.collection_name)
+}
+inline void DescribeIndexResponse::set_collection_name(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:milvus.proto.service.DescribeIndexResponse.collection_name)
+}
+inline void DescribeIndexResponse::set_collection_name(const char* value, size_t size) {
+  
+  collection_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.DescribeIndexResponse.collection_name)
+}
+inline std::string* DescribeIndexResponse::mutable_collection_name() {
+  
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.DescribeIndexResponse.collection_name)
+  return collection_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline std::string* DescribeIndexResponse::release_collection_name() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.DescribeIndexResponse.collection_name)
+  
+  return collection_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline void DescribeIndexResponse::set_allocated_collection_name(std::string* collection_name) {
+  if (collection_name != nullptr) {
+    
+  } else {
+    
+  }
+  collection_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), collection_name);
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.DescribeIndexResponse.collection_name)
+}
+
+// string field_name = 3;
+inline void DescribeIndexResponse::clear_field_name() {
+  field_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline const std::string& DescribeIndexResponse::field_name() const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.DescribeIndexResponse.field_name)
+  return field_name_.GetNoArena();
+}
+inline void DescribeIndexResponse::set_field_name(const std::string& value) {
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:milvus.proto.service.DescribeIndexResponse.field_name)
+}
+inline void DescribeIndexResponse::set_field_name(std::string&& value) {
+  
+  field_name_.SetNoArena(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.DescribeIndexResponse.field_name)
+}
+inline void DescribeIndexResponse::set_field_name(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:milvus.proto.service.DescribeIndexResponse.field_name)
+}
+inline void DescribeIndexResponse::set_field_name(const char* value, size_t size) {
+  
+  field_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.DescribeIndexResponse.field_name)
+}
+inline std::string* DescribeIndexResponse::mutable_field_name() {
+  
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.DescribeIndexResponse.field_name)
+  return field_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline std::string* DescribeIndexResponse::release_field_name() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.DescribeIndexResponse.field_name)
+  
+  return field_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline void DescribeIndexResponse::set_allocated_field_name(std::string* field_name) {
+  if (field_name != nullptr) {
+    
+  } else {
+    
+  }
+  field_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), field_name);
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.DescribeIndexResponse.field_name)
+}
+
+// string index_name = 4;
+inline void DescribeIndexResponse::clear_index_name() {
+  index_name_.ClearToEmptyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline const std::string& DescribeIndexResponse::index_name() const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.DescribeIndexResponse.index_name)
+  return index_name_.GetNoArena();
+}
+inline void DescribeIndexResponse::set_index_name(const std::string& value) {
+  
+  index_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), value);
+  // @@protoc_insertion_point(field_set:milvus.proto.service.DescribeIndexResponse.index_name)
+}
+inline void DescribeIndexResponse::set_index_name(std::string&& value) {
+  
+  index_name_.SetNoArena(
+    &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::move(value));
+  // @@protoc_insertion_point(field_set_rvalue:milvus.proto.service.DescribeIndexResponse.index_name)
+}
+inline void DescribeIndexResponse::set_index_name(const char* value) {
+  GOOGLE_DCHECK(value != nullptr);
+  
+  index_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), ::std::string(value));
+  // @@protoc_insertion_point(field_set_char:milvus.proto.service.DescribeIndexResponse.index_name)
+}
+inline void DescribeIndexResponse::set_index_name(const char* value, size_t size) {
+  
+  index_name_.SetNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(),
+      ::std::string(reinterpret_cast<const char*>(value), size));
+  // @@protoc_insertion_point(field_set_pointer:milvus.proto.service.DescribeIndexResponse.index_name)
+}
+inline std::string* DescribeIndexResponse::mutable_index_name() {
+  
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.DescribeIndexResponse.index_name)
+  return index_name_.MutableNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline std::string* DescribeIndexResponse::release_index_name() {
+  // @@protoc_insertion_point(field_release:milvus.proto.service.DescribeIndexResponse.index_name)
+  
+  return index_name_.ReleaseNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
+}
+inline void DescribeIndexResponse::set_allocated_index_name(std::string* index_name) {
+  if (index_name != nullptr) {
+    
+  } else {
+    
+  }
+  index_name_.SetAllocatedNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), index_name);
+  // @@protoc_insertion_point(field_set_allocated:milvus.proto.service.DescribeIndexResponse.index_name)
+}
+
+// repeated .milvus.proto.common.KeyValuePair extra_params = 5;
+inline int DescribeIndexResponse::extra_params_size() const {
+  return extra_params_.size();
+}
+inline ::milvus::proto::common::KeyValuePair* DescribeIndexResponse::mutable_extra_params(int index) {
+  // @@protoc_insertion_point(field_mutable:milvus.proto.service.DescribeIndexResponse.extra_params)
+  return extra_params_.Mutable(index);
+}
+inline ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >*
+DescribeIndexResponse::mutable_extra_params() {
+  // @@protoc_insertion_point(field_mutable_list:milvus.proto.service.DescribeIndexResponse.extra_params)
+  return &extra_params_;
+}
+inline const ::milvus::proto::common::KeyValuePair& DescribeIndexResponse::extra_params(int index) const {
+  // @@protoc_insertion_point(field_get:milvus.proto.service.DescribeIndexResponse.extra_params)
+  return extra_params_.Get(index);
+}
+inline ::milvus::proto::common::KeyValuePair* DescribeIndexResponse::add_extra_params() {
+  // @@protoc_insertion_point(field_add:milvus.proto.service.DescribeIndexResponse.extra_params)
+  return extra_params_.Add();
+}
+inline const ::PROTOBUF_NAMESPACE_ID::RepeatedPtrField< ::milvus::proto::common::KeyValuePair >&
+DescribeIndexResponse::extra_params() const {
+  // @@protoc_insertion_point(field_list:milvus.proto.service.DescribeIndexResponse.extra_params)
+  return extra_params_;
+}
+
 #ifdef __GNUC__
   #pragma GCC diagnostic pop
 #endif  // __GNUC__
@@ -4509,6 +5292,10 @@ QueryResult::mutable_hits() {
 
 // -------------------------------------------------------------------
 
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+
 
 // @@protoc_insertion_point(namespace_scope)
 
diff --git a/internal/master/grpc_service.go b/internal/master/grpc_service.go
index f5dc8cb4b22d5d25a5279267adfca85cc5a82fd8..e0a22f37cd0dc1c155981ebce2cd3f63d00cebcf 100644
--- a/internal/master/grpc_service.go
+++ b/internal/master/grpc_service.go
@@ -451,3 +451,15 @@ func (s *Master) AssignSegmentID(ctx context.Context, request *internalpb.Assign
 		PerChannelAssignment: segInfos,
 	}, nil
 }
+
+func (s *Master) CreateIndex(context.Context, *internalpb.CreateIndexRequest) (*commonpb.Status, error) {
+	return nil, nil
+}
+
+func (s *Master) DescribeIndex(context.Context, *internalpb.DescribeIndexRequest) (*servicepb.DescribeIndexResponse, error) {
+	return nil, nil
+}
+
+func (s *Master) DescribeIndexProgress(context.Context, *internalpb.DescribeIndexProgressRequest) (*servicepb.BoolResponse, error) {
+	return nil, nil
+}
diff --git a/internal/proto/internal_msg.proto b/internal/proto/internal_msg.proto
index 7dab6f622e566e61881a3612a726d3b9a886a7e8..6f02250a40566bd2c27d6d76ef13c2d7648a2e78 100644
--- a/internal/proto/internal_msg.proto
+++ b/internal/proto/internal_msg.proto
@@ -314,3 +314,36 @@ message QueryNodeStats {
     repeated SegmentStats seg_stats = 3;
     repeated FieldStats field_stats = 4;
 }
+
+message CreateIndexRequest {
+    MsgType msg_type = 1;
+    int64 reqID = 2;
+    uint64 timestamp = 3;
+    int64 proxyID = 4;
+    string collection_name = 5;
+    string field_name = 6;
+    string index_name = 7;
+    repeated common.KeyValuePair extra_params = 8;
+}
+
+message DescribeIndexRequest {
+    MsgType msg_type = 1;
+    int64 reqID = 2;
+    uint64 timestamp = 3;
+    int64 proxyID = 4;
+    string collection_name = 5;
+    string field_name = 6;
+    string index_name = 7;
+    repeated common.KeyValuePair extra_params = 8;
+}
+
+message DescribeIndexProgressRequest {
+    MsgType msg_type = 1;
+    int64 reqID = 2;
+    uint64 timestamp = 3;
+    int64 proxyID = 4;
+    string collection_name = 5;
+    string field_name = 6;
+    string index_name = 7;
+    repeated common.KeyValuePair extra_params = 8;
+}
diff --git a/internal/proto/internalpb/internal_msg.pb.go b/internal/proto/internalpb/internal_msg.pb.go
index bdd391388b860154af806f7ef9b5f71103b13d35..9b877a7dd9a9d2947cdf2277a7729e2dc6736725 100644
--- a/internal/proto/internalpb/internal_msg.pb.go
+++ b/internal/proto/internalpb/internal_msg.pb.go
@@ -2323,6 +2323,291 @@ func (m *QueryNodeStats) GetFieldStats() []*FieldStats {
 	return nil
 }
 
+type CreateIndexRequest struct {
+	MsgType              MsgType                  `protobuf:"varint,1,opt,name=msg_type,json=msgType,proto3,enum=milvus.proto.internal.MsgType" json:"msg_type,omitempty"`
+	ReqID                int64                    `protobuf:"varint,2,opt,name=reqID,proto3" json:"reqID,omitempty"`
+	Timestamp            uint64                   `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	ProxyID              int64                    `protobuf:"varint,4,opt,name=proxyID,proto3" json:"proxyID,omitempty"`
+	CollectionName       string                   `protobuf:"bytes,5,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
+	FieldName            string                   `protobuf:"bytes,6,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
+	IndexName            string                   `protobuf:"bytes,7,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"`
+	ExtraParams          []*commonpb.KeyValuePair `protobuf:"bytes,8,rep,name=extra_params,json=extraParams,proto3" json:"extra_params,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *CreateIndexRequest) Reset()         { *m = CreateIndexRequest{} }
+func (m *CreateIndexRequest) String() string { return proto.CompactTextString(m) }
+func (*CreateIndexRequest) ProtoMessage()    {}
+func (*CreateIndexRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7eb37f6b80b23116, []int{32}
+}
+
+func (m *CreateIndexRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_CreateIndexRequest.Unmarshal(m, b)
+}
+func (m *CreateIndexRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_CreateIndexRequest.Marshal(b, m, deterministic)
+}
+func (m *CreateIndexRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_CreateIndexRequest.Merge(m, src)
+}
+func (m *CreateIndexRequest) XXX_Size() int {
+	return xxx_messageInfo_CreateIndexRequest.Size(m)
+}
+func (m *CreateIndexRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_CreateIndexRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_CreateIndexRequest proto.InternalMessageInfo
+
+func (m *CreateIndexRequest) GetMsgType() MsgType {
+	if m != nil {
+		return m.MsgType
+	}
+	return MsgType_kNone
+}
+
+func (m *CreateIndexRequest) GetReqID() int64 {
+	if m != nil {
+		return m.ReqID
+	}
+	return 0
+}
+
+func (m *CreateIndexRequest) GetTimestamp() uint64 {
+	if m != nil {
+		return m.Timestamp
+	}
+	return 0
+}
+
+func (m *CreateIndexRequest) GetProxyID() int64 {
+	if m != nil {
+		return m.ProxyID
+	}
+	return 0
+}
+
+func (m *CreateIndexRequest) GetCollectionName() string {
+	if m != nil {
+		return m.CollectionName
+	}
+	return ""
+}
+
+func (m *CreateIndexRequest) GetFieldName() string {
+	if m != nil {
+		return m.FieldName
+	}
+	return ""
+}
+
+func (m *CreateIndexRequest) GetIndexName() string {
+	if m != nil {
+		return m.IndexName
+	}
+	return ""
+}
+
+func (m *CreateIndexRequest) GetExtraParams() []*commonpb.KeyValuePair {
+	if m != nil {
+		return m.ExtraParams
+	}
+	return nil
+}
+
+type DescribeIndexRequest struct {
+	MsgType              MsgType                  `protobuf:"varint,1,opt,name=msg_type,json=msgType,proto3,enum=milvus.proto.internal.MsgType" json:"msg_type,omitempty"`
+	ReqID                int64                    `protobuf:"varint,2,opt,name=reqID,proto3" json:"reqID,omitempty"`
+	Timestamp            uint64                   `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	ProxyID              int64                    `protobuf:"varint,4,opt,name=proxyID,proto3" json:"proxyID,omitempty"`
+	CollectionName       string                   `protobuf:"bytes,5,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
+	FieldName            string                   `protobuf:"bytes,6,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
+	IndexName            string                   `protobuf:"bytes,7,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"`
+	ExtraParams          []*commonpb.KeyValuePair `protobuf:"bytes,8,rep,name=extra_params,json=extraParams,proto3" json:"extra_params,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *DescribeIndexRequest) Reset()         { *m = DescribeIndexRequest{} }
+func (m *DescribeIndexRequest) String() string { return proto.CompactTextString(m) }
+func (*DescribeIndexRequest) ProtoMessage()    {}
+func (*DescribeIndexRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7eb37f6b80b23116, []int{33}
+}
+
+func (m *DescribeIndexRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DescribeIndexRequest.Unmarshal(m, b)
+}
+func (m *DescribeIndexRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DescribeIndexRequest.Marshal(b, m, deterministic)
+}
+func (m *DescribeIndexRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DescribeIndexRequest.Merge(m, src)
+}
+func (m *DescribeIndexRequest) XXX_Size() int {
+	return xxx_messageInfo_DescribeIndexRequest.Size(m)
+}
+func (m *DescribeIndexRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DescribeIndexRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DescribeIndexRequest proto.InternalMessageInfo
+
+func (m *DescribeIndexRequest) GetMsgType() MsgType {
+	if m != nil {
+		return m.MsgType
+	}
+	return MsgType_kNone
+}
+
+func (m *DescribeIndexRequest) GetReqID() int64 {
+	if m != nil {
+		return m.ReqID
+	}
+	return 0
+}
+
+func (m *DescribeIndexRequest) GetTimestamp() uint64 {
+	if m != nil {
+		return m.Timestamp
+	}
+	return 0
+}
+
+func (m *DescribeIndexRequest) GetProxyID() int64 {
+	if m != nil {
+		return m.ProxyID
+	}
+	return 0
+}
+
+func (m *DescribeIndexRequest) GetCollectionName() string {
+	if m != nil {
+		return m.CollectionName
+	}
+	return ""
+}
+
+func (m *DescribeIndexRequest) GetFieldName() string {
+	if m != nil {
+		return m.FieldName
+	}
+	return ""
+}
+
+func (m *DescribeIndexRequest) GetIndexName() string {
+	if m != nil {
+		return m.IndexName
+	}
+	return ""
+}
+
+func (m *DescribeIndexRequest) GetExtraParams() []*commonpb.KeyValuePair {
+	if m != nil {
+		return m.ExtraParams
+	}
+	return nil
+}
+
+type DescribeIndexProgressRequest struct {
+	MsgType              MsgType                  `protobuf:"varint,1,opt,name=msg_type,json=msgType,proto3,enum=milvus.proto.internal.MsgType" json:"msg_type,omitempty"`
+	ReqID                int64                    `protobuf:"varint,2,opt,name=reqID,proto3" json:"reqID,omitempty"`
+	Timestamp            uint64                   `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
+	ProxyID              int64                    `protobuf:"varint,4,opt,name=proxyID,proto3" json:"proxyID,omitempty"`
+	CollectionName       string                   `protobuf:"bytes,5,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
+	FieldName            string                   `protobuf:"bytes,6,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
+	IndexName            string                   `protobuf:"bytes,7,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"`
+	ExtraParams          []*commonpb.KeyValuePair `protobuf:"bytes,8,rep,name=extra_params,json=extraParams,proto3" json:"extra_params,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *DescribeIndexProgressRequest) Reset()         { *m = DescribeIndexProgressRequest{} }
+func (m *DescribeIndexProgressRequest) String() string { return proto.CompactTextString(m) }
+func (*DescribeIndexProgressRequest) ProtoMessage()    {}
+func (*DescribeIndexProgressRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_7eb37f6b80b23116, []int{34}
+}
+
+func (m *DescribeIndexProgressRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DescribeIndexProgressRequest.Unmarshal(m, b)
+}
+func (m *DescribeIndexProgressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DescribeIndexProgressRequest.Marshal(b, m, deterministic)
+}
+func (m *DescribeIndexProgressRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DescribeIndexProgressRequest.Merge(m, src)
+}
+func (m *DescribeIndexProgressRequest) XXX_Size() int {
+	return xxx_messageInfo_DescribeIndexProgressRequest.Size(m)
+}
+func (m *DescribeIndexProgressRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_DescribeIndexProgressRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DescribeIndexProgressRequest proto.InternalMessageInfo
+
+func (m *DescribeIndexProgressRequest) GetMsgType() MsgType {
+	if m != nil {
+		return m.MsgType
+	}
+	return MsgType_kNone
+}
+
+func (m *DescribeIndexProgressRequest) GetReqID() int64 {
+	if m != nil {
+		return m.ReqID
+	}
+	return 0
+}
+
+func (m *DescribeIndexProgressRequest) GetTimestamp() uint64 {
+	if m != nil {
+		return m.Timestamp
+	}
+	return 0
+}
+
+func (m *DescribeIndexProgressRequest) GetProxyID() int64 {
+	if m != nil {
+		return m.ProxyID
+	}
+	return 0
+}
+
+func (m *DescribeIndexProgressRequest) GetCollectionName() string {
+	if m != nil {
+		return m.CollectionName
+	}
+	return ""
+}
+
+func (m *DescribeIndexProgressRequest) GetFieldName() string {
+	if m != nil {
+		return m.FieldName
+	}
+	return ""
+}
+
+func (m *DescribeIndexProgressRequest) GetIndexName() string {
+	if m != nil {
+		return m.IndexName
+	}
+	return ""
+}
+
+func (m *DescribeIndexProgressRequest) GetExtraParams() []*commonpb.KeyValuePair {
+	if m != nil {
+		return m.ExtraParams
+	}
+	return nil
+}
+
 func init() {
 	proto.RegisterEnum("milvus.proto.internal.MsgType", MsgType_name, MsgType_value)
 	proto.RegisterEnum("milvus.proto.internal.PeerRole", PeerRole_name, PeerRole_value)
@@ -2358,118 +2643,127 @@ func init() {
 	proto.RegisterType((*FieldStats)(nil), "milvus.proto.internal.FieldStats")
 	proto.RegisterType((*SegmentStats)(nil), "milvus.proto.internal.SegmentStats")
 	proto.RegisterType((*QueryNodeStats)(nil), "milvus.proto.internal.QueryNodeStats")
+	proto.RegisterType((*CreateIndexRequest)(nil), "milvus.proto.internal.CreateIndexRequest")
+	proto.RegisterType((*DescribeIndexRequest)(nil), "milvus.proto.internal.DescribeIndexRequest")
+	proto.RegisterType((*DescribeIndexProgressRequest)(nil), "milvus.proto.internal.DescribeIndexProgressRequest")
 }
 
 func init() { proto.RegisterFile("internal_msg.proto", fileDescriptor_7eb37f6b80b23116) }
 
 var fileDescriptor_7eb37f6b80b23116 = []byte{
-	// 1723 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x58, 0xcd, 0x6f, 0x23, 0x49,
-	0xf9, 0xde, 0x72, 0xfb, 0xf3, 0xb5, 0xe3, 0xf4, 0x54, 0x92, 0x19, 0xcf, 0xee, 0x4f, 0x3b, 0x99,
-	0x9e, 0x9f, 0x20, 0x2c, 0x22, 0x81, 0x0c, 0x07, 0xf6, 0x06, 0x89, 0xb5, 0xac, 0x19, 0x32, 0x0a,
-	0x9d, 0x68, 0x91, 0xd0, 0x4a, 0xad, 0x8e, 0xfd, 0xc6, 0x2e, 0xf5, 0x97, 0x53, 0xd5, 0x9e, 0x8c,
-	0xe7, 0x80, 0x84, 0x34, 0x07, 0x4e, 0x88, 0x0f, 0x71, 0xe0, 0x04, 0x47, 0x4e, 0x2b, 0x16, 0xee,
-	0x9c, 0xf9, 0x3a, 0xf1, 0x5f, 0xc0, 0x01, 0x24, 0x58, 0x0e, 0xdc, 0x50, 0x55, 0xf5, 0x87, 0x3b,
-	0xb1, 0x9d, 0x11, 0xc9, 0x2c, 0x83, 0x96, 0x5b, 0xd5, 0xdb, 0xd5, 0x55, 0xef, 0xf3, 0x3c, 0x6f,
-	0xbd, 0x55, 0xf5, 0x02, 0x65, 0x61, 0x8c, 0x3c, 0x74, 0x7d, 0x27, 0x10, 0xc3, 0xed, 0x31, 0x8f,
-	0xe2, 0x88, 0x6e, 0x04, 0xcc, 0x7f, 0x32, 0x11, 0xba, 0xb7, 0x9d, 0x0e, 0x78, 0xbd, 0xd5, 0x8f,
-	0x82, 0x20, 0x0a, 0xb5, 0xf9, 0xf5, 0x5b, 0x02, 0xf9, 0x13, 0xd6, 0xc7, 0xfc, 0x3f, 0x2b, 0x84,
-	0x46, 0xaf, 0x6b, 0xe3, 0xd9, 0x04, 0x45, 0x4c, 0x6f, 0x43, 0x75, 0x8c, 0xc8, 0x7b, 0xdd, 0x0e,
-	0xd9, 0x24, 0x5b, 0x86, 0x9d, 0xf4, 0xe8, 0x43, 0x28, 0xf3, 0xc8, 0xc7, 0x4e, 0x69, 0x93, 0x6c,
-	0xb5, 0x77, 0xef, 0x6d, 0xcf, 0x5d, 0x6b, 0xfb, 0x10, 0x91, 0xdb, 0x91, 0x8f, 0xb6, 0x1a, 0x4c,
-	0xd7, 0xa1, 0xd2, 0x8f, 0x26, 0x61, 0xdc, 0x31, 0x36, 0xc9, 0xd6, 0x8a, 0xad, 0x3b, 0xd6, 0x10,
-	0x40, 0xae, 0x27, 0xc6, 0x51, 0x28, 0x90, 0x3e, 0x84, 0xaa, 0x88, 0xdd, 0x78, 0x22, 0xd4, 0x82,
-	0xcd, 0xdd, 0x37, 0x8a, 0x53, 0x27, 0xce, 0x1f, 0xa9, 0x21, 0x76, 0x32, 0x94, 0xb6, 0xa1, 0xd4,
-	0xeb, 0x2a, 0x5f, 0x0c, 0xbb, 0xd4, 0xeb, 0x2e, 0x58, 0x28, 0x02, 0x38, 0x16, 0xd1, 0xc7, 0x88,
-	0xec, 0x09, 0x34, 0xd5, 0x82, 0xd7, 0x81, 0xf6, 0x7f, 0xd0, 0x88, 0x59, 0x80, 0x22, 0x76, 0x83,
-	0xb1, 0xf2, 0xa9, 0x6c, 0xe7, 0x86, 0x05, 0xeb, 0x3e, 0x27, 0xd0, 0x3a, 0xc2, 0x61, 0xae, 0x62,
-	0x36, 0x8c, 0xcc, 0x0c, 0x93, 0x53, 0xf7, 0x47, 0x6e, 0x18, 0xa2, 0x9f, 0x90, 0x57, 0xb1, 0x73,
-	0x03, 0x7d, 0x03, 0x1a, 0xfd, 0xc8, 0xf7, 0x9d, 0xd0, 0x0d, 0x50, 0x4d, 0xdf, 0xb0, 0xeb, 0xd2,
-	0xf0, 0xd8, 0x0d, 0x90, 0x3e, 0x80, 0x95, 0xb1, 0xcb, 0x63, 0x16, 0xb3, 0x28, 0x74, 0x62, 0x77,
-	0xd8, 0x29, 0xab, 0x01, 0xad, 0xcc, 0x78, 0xec, 0x0e, 0xad, 0x0f, 0x08, 0xd0, 0xaf, 0x08, 0xc1,
-	0x86, 0x61, 0xc1, 0x99, 0x1b, 0x25, 0xfe, 0x11, 0xac, 0x8e, 0x91, 0x3b, 0x89, 0xdb, 0x0e, 0xc7,
-	0xb3, 0x8e, 0xb1, 0x69, 0x6c, 0x35, 0x77, 0x1f, 0x2c, 0xf8, 0x7f, 0xd6, 0x15, 0x7b, 0x65, 0x8c,
-	0x7c, 0x5f, 0xff, 0x6a, 0xe3, 0x99, 0xf5, 0x6b, 0x02, 0xab, 0xea, 0xbb, 0xf6, 0x3a, 0xc0, 0x50,
-	0x51, 0x27, 0xa4, 0x29, 0x71, 0x56, 0x77, 0xae, 0xa0, 0x6e, 0xae, 0x2a, 0x45, 0x42, 0xcb, 0x57,
-	0x11, 0x5a, 0xb9, 0x4c, 0x28, 0xbd, 0x07, 0x4d, 0x7c, 0x3a, 0x66, 0x1c, 0x1d, 0x19, 0x01, 0x9d,
-	0xaa, 0x8a, 0x06, 0xd0, 0xa6, 0x63, 0x16, 0xa0, 0xf5, 0x73, 0x02, 0x6b, 0x05, 0xc6, 0xaf, 0x13,
-	0x79, 0xef, 0xc3, 0xed, 0x59, 0x6a, 0xdd, 0x8c, 0x93, 0x4e, 0x49, 0x31, 0xfc, 0xa9, 0x65, 0x0c,
-	0xe7, 0x0c, 0xda, 0xeb, 0x39, 0xc9, 0xb9, 0xd5, 0xfa, 0x27, 0x81, 0x3b, 0xfb, 0x1c, 0xdd, 0x18,
-	0xf7, 0x23, 0xdf, 0xc7, 0xbe, 0xc4, 0x98, 0x46, 0xc8, 0xdb, 0x50, 0x0f, 0xc4, 0xd0, 0x89, 0xa7,
-	0x63, 0x54, 0x0e, 0xb7, 0x77, 0xdf, 0x5c, 0xb0, 0xd6, 0x81, 0x18, 0x1e, 0x4f, 0xc7, 0x68, 0xd7,
-	0x02, 0xdd, 0xa0, 0x16, 0xb4, 0xfa, 0xd9, 0x7c, 0x59, 0x4e, 0x28, 0xd8, 0xa4, 0x3c, 0x1c, 0xcf,
-	0x7a, 0x5d, 0x25, 0x8f, 0x61, 0xeb, 0x4e, 0x71, 0xa3, 0x95, 0x2f, 0x6e, 0xb4, 0x0e, 0xd4, 0xc6,
-	0x3c, 0x7a, 0x3a, 0xed, 0x75, 0x95, 0x32, 0x86, 0x9d, 0x76, 0xe9, 0x17, 0xa0, 0x2a, 0xfa, 0x23,
-	0x0c, 0x5c, 0xa5, 0x47, 0x73, 0xf7, 0xee, 0x5c, 0x6e, 0xf7, 0xfc, 0xe8, 0xc4, 0x4e, 0x06, 0x5a,
-	0x3f, 0x2a, 0xc1, 0x46, 0x97, 0x47, 0xe3, 0xff, 0x72, 0xe4, 0x07, 0xb0, 0x9a, 0xcf, 0xae, 0xc3,
-	0x5a, 0x53, 0xf0, 0xff, 0x45, 0x9f, 0x93, 0x23, 0x66, 0x3b, 0x87, 0x2b, 0x43, 0xde, 0x6e, 0xf7,
-	0x0b, 0x7d, 0xeb, 0x2f, 0x04, 0xd6, 0xdf, 0x75, 0xc5, 0x8d, 0x92, 0x92, 0x01, 0x2e, 0x2d, 0x04,
-	0x6c, 0x2c, 0x01, 0x5c, 0xbe, 0x12, 0x70, 0xe5, 0x1a, 0x80, 0xff, 0x4e, 0xe0, 0x6e, 0x17, 0x45,
-	0x9f, 0xb3, 0x13, 0xfc, 0xe4, 0xa0, 0xfe, 0x19, 0x81, 0x8d, 0xa3, 0x51, 0x74, 0xfe, 0xea, 0x22,
-	0xb6, 0x7e, 0x55, 0x82, 0xdb, 0x3a, 0x37, 0x1d, 0xa6, 0xe9, 0xf7, 0x63, 0xda, 0xa0, 0x9b, 0xd0,
-	0xcc, 0x32, 0x7e, 0xb6, 0x4d, 0x67, 0x4d, 0x39, 0xd2, 0xf2, 0x42, 0xa4, 0x95, 0x25, 0x48, 0xab,
-	0x45, 0x6d, 0xbf, 0x06, 0xed, 0xfc, 0xd8, 0x51, 0xd2, 0xd6, 0x94, 0xb4, 0x0f, 0xe6, 0x4b, 0x9b,
-	0xd1, 0xa1, 0x94, 0xcd, 0x4f, 0x2c, 0x25, 0xec, 0x87, 0x25, 0x58, 0x97, 0x59, 0xed, 0x7f, 0x9c,
-	0xbd, 0x38, 0x67, 0x7f, 0x26, 0xb0, 0xf6, 0xae, 0x2b, 0x6e, 0x92, 0xb2, 0x9b, 0xdd, 0xfc, 0x97,
-	0xc1, 0x56, 0xfe, 0x6d, 0xb0, 0x7f, 0x25, 0xd0, 0x49, 0xf3, 0xdd, 0x27, 0x03, 0xb1, 0x3c, 0xd2,
-	0x64, 0xae, 0x7b, 0x75, 0xd1, 0xde, 0x70, 0x72, 0xff, 0x5b, 0x09, 0x56, 0x7a, 0xa1, 0x40, 0x1e,
-	0xbf, 0x34, 0xa4, 0x9f, 0xbe, 0xec, 0xb1, 0x7e, 0x9d, 0x5c, 0xf0, 0xe5, 0x85, 0xde, 0x28, 0x92,
-	0x37, 0x81, 0x43, 0x79, 0x23, 0xcd, 0xee, 0x37, 0xb9, 0xa1, 0x78, 0xcd, 0xd7, 0x69, 0x60, 0xe6,
-	0x9a, 0x3f, 0xc3, 0x6a, 0xad, 0xc8, 0xea, 0x9b, 0x00, 0x19, 0xf9, 0xa2, 0x53, 0xdf, 0x34, 0xe4,
-	0x3d, 0x3d, 0xb7, 0xc8, 0x27, 0x10, 0x8f, 0xce, 0x7b, 0x5d, 0xd1, 0x69, 0x6c, 0x1a, 0xf2, 0x09,
-	0xa4, 0x7b, 0xf4, 0x8b, 0x50, 0xe7, 0xd1, 0xb9, 0x33, 0x70, 0x63, 0xb7, 0x03, 0xea, 0x92, 0xbd,
-	0xe4, 0x36, 0x59, 0xe3, 0xd1, 0x79, 0xd7, 0x8d, 0x5d, 0xeb, 0x79, 0x09, 0x56, 0xba, 0xe8, 0x63,
-	0x8c, 0xff, 0x79, 0xd2, 0x0b, 0x8c, 0x95, 0x97, 0x30, 0x56, 0x59, 0xc6, 0x58, 0xf5, 0x12, 0x63,
-	0xf7, 0xa1, 0x35, 0xe6, 0x2c, 0x70, 0xf9, 0xd4, 0xf1, 0x70, 0x2a, 0x3a, 0x35, 0xc5, 0x5b, 0x33,
-	0xb1, 0x3d, 0xc2, 0xa9, 0xb0, 0x3e, 0x22, 0xb0, 0x72, 0x84, 0x2e, 0xef, 0x8f, 0x5e, 0x1a, 0x0d,
-	0x33, 0xfe, 0x1b, 0x45, 0xff, 0x97, 0xdf, 0xa1, 0x3f, 0x03, 0x26, 0x47, 0x31, 0xf1, 0x63, 0x27,
-	0x27, 0x47, 0x13, 0xb0, 0xaa, 0xed, 0xfb, 0x19, 0x45, 0x3b, 0x50, 0x39, 0x9b, 0x20, 0x9f, 0x5e,
-	0xfd, 0x9a, 0xd0, 0xe3, 0xac, 0x3f, 0x12, 0x30, 0x8f, 0xa6, 0x62, 0x3f, 0x0a, 0x4f, 0xd9, 0xf0,
-	0x95, 0x43, 0x4e, 0xa1, 0xac, 0xf4, 0xaa, 0x6c, 0x1a, 0x5b, 0x0d, 0x5b, 0xb5, 0xa5, 0x96, 0x1e,
-	0x4e, 0x9d, 0x31, 0xc7, 0x53, 0xf6, 0x14, 0xb5, 0xda, 0x0d, 0xbb, 0xe9, 0xe1, 0xf4, 0x30, 0x31,
-	0x59, 0x1f, 0x94, 0xa0, 0x95, 0x6a, 0x29, 0xf9, 0xb9, 0x0e, 0xa0, 0xfc, 0xf1, 0x5b, 0x7a, 0xf1,
-	0xc7, 0xef, 0xfc, 0x97, 0xd2, 0xe2, 0x3c, 0x7a, 0x1f, 0x5a, 0x4a, 0x0e, 0x27, 0x8c, 0x06, 0x98,
-	0xa9, 0xdb, 0x54, 0xb6, 0xc7, 0xca, 0x54, 0x24, 0xaa, 0xfa, 0x22, 0x21, 0x52, 0x9b, 0x1f, 0x22,
-	0x14, 0xca, 0x23, 0x16, 0xeb, 0xbc, 0xd2, 0xb2, 0x55, 0xdb, 0xfa, 0x36, 0x34, 0x8f, 0x59, 0x80,
-	0xc7, 0xac, 0xef, 0x1d, 0x88, 0xe1, 0x75, 0xe8, 0xca, 0xcb, 0x33, 0xa5, 0x42, 0x79, 0x66, 0xe9,
-	0x09, 0x63, 0x7d, 0x87, 0x40, 0xfd, 0x1d, 0x7f, 0x22, 0x46, 0xd7, 0x5c, 0xbd, 0x90, 0x8f, 0x4b,
-	0x73, 0xf2, 0xf1, 0x12, 0x1f, 0x7e, 0x42, 0xa0, 0xf6, 0x08, 0xa7, 0xbb, 0x47, 0x38, 0x54, 0xfa,
-	0xc9, 0x9c, 0x9a, 0x96, 0x6d, 0x54, 0x87, 0xde, 0x83, 0xe6, 0x4c, 0x16, 0x49, 0xe6, 0x87, 0x3c,
-	0x89, 0x5c, 0x71, 0x8c, 0xde, 0x85, 0x3a, 0x13, 0xce, 0x13, 0xd7, 0x67, 0x03, 0xa5, 0x7f, 0xdd,
-	0xae, 0x31, 0xf1, 0x9e, 0xec, 0xca, 0xfc, 0x95, 0xb9, 0xa9, 0xa3, 0xdd, 0xb0, 0x67, 0x2c, 0xd6,
-	0xfb, 0x00, 0x89, 0x6b, 0x92, 0xa0, 0x2c, 0xba, 0xc8, 0x6c, 0x74, 0x7d, 0x09, 0x6a, 0x1e, 0x4e,
-	0x77, 0x05, 0x0e, 0x93, 0x0a, 0xcb, 0x22, 0xd6, 0x92, 0x99, 0xec, 0x74, 0xb8, 0xf5, 0x53, 0x02,
-	0x8d, 0xaf, 0x47, 0xee, 0xa0, 0x17, 0x0e, 0xf0, 0xe9, 0xcb, 0xa3, 0xbf, 0x03, 0xb5, 0x53, 0x86,
-	0xfe, 0x20, 0x4f, 0x02, 0x49, 0x57, 0x12, 0xcb, 0xe4, 0xda, 0xce, 0xd8, 0x8d, 0x47, 0xa2, 0x53,
-	0x56, 0x3b, 0x1a, 0x94, 0xe9, 0x50, 0x5a, 0xac, 0xe7, 0x04, 0x40, 0x79, 0x27, 0xf7, 0x99, 0xa0,
-	0x5d, 0x68, 0xa5, 0xe3, 0xb9, 0x1b, 0x88, 0x0e, 0x51, 0x78, 0xef, 0xcf, 0xdd, 0x99, 0x8f, 0x70,
-	0xfa, 0x9e, 0xeb, 0x4f, 0xf0, 0xd0, 0x65, 0xdc, 0x6e, 0x26, 0x73, 0xca, 0xbf, 0xe8, 0xe7, 0x61,
-	0x3d, 0x9c, 0x04, 0x0e, 0x47, 0xdf, 0x8d, 0x71, 0xe0, 0x24, 0x8e, 0x8a, 0xc4, 0x71, 0x1a, 0x4e,
-	0x02, 0x5b, 0x7f, 0x3a, 0x4a, 0xbe, 0x58, 0xdf, 0x23, 0x00, 0xef, 0x48, 0x9f, 0xb5, 0x1b, 0x17,
-	0x9f, 0x17, 0x64, 0xce, 0xf3, 0x62, 0x06, 0x74, 0xa9, 0x08, 0x7a, 0x2f, 0x05, 0x2d, 0x73, 0x86,
-	0x48, 0xea, 0x8e, 0xf7, 0x17, 0x50, 0x9d, 0x83, 0x4f, 0x78, 0x51, 0x6d, 0xeb, 0xc7, 0xba, 0x54,
-	0x2b, 0xbd, 0xd3, 0x2e, 0x15, 0x14, 0x20, 0x17, 0x15, 0xb8, 0x07, 0xcd, 0x00, 0x83, 0x88, 0x4f,
-	0x1d, 0xc1, 0x9e, 0x61, 0x1a, 0xc0, 0xda, 0x74, 0xc4, 0x9e, 0xa1, 0x0c, 0x51, 0x45, 0x49, 0x74,
-	0x2e, 0x52, 0x8d, 0x24, 0x0d, 0xd1, 0xb9, 0xa0, 0x9f, 0x85, 0x5b, 0x1c, 0xfb, 0x18, 0xc6, 0xfe,
-	0xd4, 0x09, 0xa2, 0x01, 0x3b, 0x65, 0x98, 0x86, 0xb1, 0x99, 0x7e, 0x38, 0x48, 0xec, 0xd6, 0x9f,
-	0x08, 0xb4, 0xbf, 0x91, 0x26, 0x2f, 0xed, 0xd9, 0x4b, 0xc8, 0x29, 0x5f, 0x56, 0x60, 0x0b, 0xfc,
-	0x2d, 0xa9, 0xdb, 0x66, 0x24, 0xd9, 0x75, 0x81, 0x43, 0xed, 0xd4, 0x1e, 0x34, 0x95, 0x1c, 0xc9,
-	0x1c, 0xe5, 0xa5, 0x1a, 0xe4, 0xca, 0xdb, 0x70, 0x9a, 0xb5, 0xdf, 0xfa, 0xae, 0x01, 0xb5, 0xc4,
-	0x65, 0xda, 0x80, 0x8a, 0xf7, 0x38, 0x0a, 0xd1, 0x7c, 0x8d, 0x6e, 0xc0, 0x2d, 0xef, 0x62, 0x85,
-	0xd2, 0x1c, 0xd0, 0x35, 0x58, 0xf5, 0x8a, 0xc5, 0x3b, 0x13, 0x29, 0x85, 0xb6, 0x57, 0xa8, 0x5d,
-	0x99, 0xa7, 0xf4, 0x0e, 0xac, 0x79, 0x97, 0xcb, 0x3b, 0xa6, 0xdc, 0xfd, 0xa6, 0x57, 0xac, 0x80,
-	0x08, 0x73, 0xa4, 0xa6, 0xf8, 0x2a, 0xc6, 0xd9, 0x51, 0x2e, 0x4c, 0x46, 0x37, 0xc0, 0xf4, 0x2e,
-	0x14, 0x22, 0xcc, 0xdf, 0x10, 0xba, 0x06, 0x6d, 0xaf, 0xf0, 0xd2, 0x36, 0x7f, 0x4b, 0x28, 0x85,
-	0x15, 0x6f, 0xf6, 0x29, 0x69, 0xfe, 0x8e, 0xd0, 0x3b, 0x40, 0xbd, 0x4b, 0x2f, 0x2e, 0xf3, 0xf7,
-	0x84, 0xae, 0xc3, 0xaa, 0x57, 0x78, 0x98, 0x08, 0xf3, 0x0f, 0x84, 0xb6, 0xa0, 0xe6, 0xe9, 0xdb,
-	0xbb, 0xf9, 0x7d, 0x43, 0xf5, 0xf4, 0xb5, 0xd2, 0xfc, 0x81, 0x41, 0x9b, 0x50, 0xf5, 0x54, 0x82,
-	0x37, 0x7f, 0xa8, 0x3f, 0xe9, 0xe3, 0xd9, 0xfc, 0xc8, 0x50, 0x2b, 0xcf, 0x1e, 0xd6, 0xe6, 0x3f,
-	0x0c, 0xda, 0x86, 0x86, 0x97, 0x1e, 0x48, 0xe6, 0x2f, 0x1a, 0x6a, 0xc1, 0x62, 0x3c, 0x99, 0x1f,
-	0x36, 0xe8, 0x2a, 0x80, 0x97, 0xe5, 0x2d, 0xf3, 0x97, 0x8d, 0xb7, 0xde, 0x86, 0x7a, 0x5a, 0xe0,
-	0xa7, 0x00, 0xd5, 0x03, 0x57, 0xc4, 0xc8, 0xcd, 0xd7, 0x64, 0xdb, 0x46, 0x77, 0x80, 0xdc, 0x24,
-	0xb2, 0xfd, 0x4d, 0xce, 0xa4, 0xbd, 0x24, 0xe5, 0x3a, 0x94, 0x27, 0xb0, 0x69, 0xec, 0x75, 0xbf,
-	0xb5, 0x37, 0x64, 0xf1, 0x68, 0x72, 0x22, 0xf3, 0xc6, 0xce, 0x33, 0xe6, 0xfb, 0xec, 0x59, 0x8c,
-	0xfd, 0xd1, 0x8e, 0x8e, 0x85, 0xcf, 0x0d, 0x98, 0x88, 0x39, 0x3b, 0x99, 0xc4, 0x38, 0xd8, 0x49,
-	0x23, 0x62, 0x47, 0x05, 0x48, 0xd6, 0x1d, 0x9f, 0x9c, 0x54, 0x95, 0xe5, 0xe1, 0xbf, 0x02, 0x00,
-	0x00, 0xff, 0xff, 0x3b, 0xdf, 0x6d, 0x19, 0x51, 0x1b, 0x00, 0x00,
+	// 1812 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6f, 0x23, 0x49,
+	0x15, 0xdf, 0xee, 0xf6, 0x57, 0x3f, 0x3b, 0x4e, 0x4f, 0x25, 0x99, 0xf1, 0xec, 0x2e, 0x3b, 0x99,
+	0x1e, 0xc4, 0x86, 0x45, 0x24, 0x90, 0xe1, 0xc0, 0xde, 0x20, 0xb1, 0x96, 0x35, 0x43, 0x46, 0xa1,
+	0x13, 0x2d, 0x12, 0x5a, 0xa9, 0xd5, 0xb1, 0x5f, 0xec, 0x56, 0x7f, 0x39, 0x55, 0xed, 0x49, 0x3c,
+	0x07, 0x24, 0xa4, 0x39, 0x70, 0x42, 0x7c, 0x88, 0x03, 0x27, 0x38, 0x72, 0x5a, 0xb1, 0x70, 0xe7,
+	0x0c, 0xcb, 0x9e, 0x10, 0xff, 0x04, 0x1c, 0x40, 0x82, 0xe5, 0xc0, 0x0d, 0x55, 0x55, 0x7f, 0xb8,
+	0x13, 0xdb, 0x89, 0x70, 0x66, 0x09, 0x9a, 0xb9, 0x75, 0xbd, 0x2a, 0x57, 0xbd, 0xf7, 0xfb, 0xbd,
+	0x7a, 0xf5, 0xde, 0x33, 0x10, 0x37, 0x8c, 0x91, 0x86, 0x8e, 0x6f, 0x07, 0xac, 0xbf, 0x39, 0xa4,
+	0x51, 0x1c, 0x91, 0xb5, 0xc0, 0xf5, 0x9f, 0x8c, 0x98, 0x1c, 0x6d, 0xa6, 0x0b, 0x5e, 0x6d, 0x74,
+	0xa3, 0x20, 0x88, 0x42, 0x29, 0x7e, 0xf5, 0x16, 0x43, 0xfa, 0xc4, 0xed, 0x62, 0xfe, 0x3b, 0x33,
+	0x04, 0xbd, 0xd3, 0xb6, 0xf0, 0x64, 0x84, 0x2c, 0x26, 0xb7, 0xa1, 0x32, 0x44, 0xa4, 0x9d, 0x76,
+	0x4b, 0x59, 0x57, 0x36, 0x34, 0x2b, 0x19, 0x91, 0x87, 0x50, 0xa2, 0x91, 0x8f, 0x2d, 0x75, 0x5d,
+	0xd9, 0x68, 0x6e, 0xdf, 0xdb, 0x9c, 0x7a, 0xd6, 0xe6, 0x3e, 0x22, 0xb5, 0x22, 0x1f, 0x2d, 0xb1,
+	0x98, 0xac, 0x42, 0xb9, 0x1b, 0x8d, 0xc2, 0xb8, 0xa5, 0xad, 0x2b, 0x1b, 0x4b, 0x96, 0x1c, 0x98,
+	0x7d, 0x00, 0x7e, 0x1e, 0x1b, 0x46, 0x21, 0x43, 0xf2, 0x10, 0x2a, 0x2c, 0x76, 0xe2, 0x11, 0x13,
+	0x07, 0xd6, 0xb7, 0x5f, 0x2b, 0x6e, 0x9d, 0x28, 0x7f, 0x20, 0x96, 0x58, 0xc9, 0x52, 0xd2, 0x04,
+	0xb5, 0xd3, 0x16, 0xba, 0x68, 0x96, 0xda, 0x69, 0xcf, 0x38, 0x28, 0x02, 0x38, 0x64, 0xd1, 0xa7,
+	0x68, 0xd9, 0x13, 0xa8, 0x8b, 0x03, 0x17, 0x31, 0xed, 0x75, 0xd0, 0x63, 0x37, 0x40, 0x16, 0x3b,
+	0xc1, 0x50, 0xe8, 0x54, 0xb2, 0x72, 0xc1, 0x8c, 0x73, 0x9f, 0x29, 0xd0, 0x38, 0xc0, 0x7e, 0xce,
+	0x62, 0xb6, 0x4c, 0x99, 0x58, 0xc6, 0xb7, 0xee, 0x0e, 0x9c, 0x30, 0x44, 0x3f, 0x01, 0xaf, 0x6c,
+	0xe5, 0x02, 0xf2, 0x1a, 0xe8, 0xdd, 0xc8, 0xf7, 0xed, 0xd0, 0x09, 0x50, 0x6c, 0xaf, 0x5b, 0x35,
+	0x2e, 0x78, 0xec, 0x04, 0x48, 0x1e, 0xc0, 0xd2, 0xd0, 0xa1, 0xb1, 0x1b, 0xbb, 0x51, 0x68, 0xc7,
+	0x4e, 0xbf, 0x55, 0x12, 0x0b, 0x1a, 0x99, 0xf0, 0xd0, 0xe9, 0x9b, 0x1f, 0x28, 0x40, 0xbe, 0xce,
+	0x98, 0xdb, 0x0f, 0x0b, 0xca, 0x5c, 0x2b, 0xf0, 0x8f, 0x60, 0x79, 0x88, 0xd4, 0x4e, 0xd4, 0xb6,
+	0x29, 0x9e, 0xb4, 0xb4, 0x75, 0x6d, 0xa3, 0xbe, 0xfd, 0x60, 0xc6, 0xef, 0x27, 0x55, 0xb1, 0x96,
+	0x86, 0x48, 0x77, 0xe5, 0x4f, 0x2d, 0x3c, 0x31, 0x7f, 0xa7, 0xc0, 0xb2, 0x98, 0x97, 0x5a, 0x07,
+	0x18, 0x0a, 0xe8, 0x18, 0x17, 0x25, 0xca, 0xca, 0xc1, 0x25, 0xd0, 0x4d, 0x65, 0xa5, 0x08, 0x68,
+	0xe9, 0x32, 0x40, 0xcb, 0x17, 0x01, 0x25, 0xf7, 0xa0, 0x8e, 0x67, 0x43, 0x97, 0xa2, 0xcd, 0x3d,
+	0xa0, 0x55, 0x11, 0xde, 0x00, 0x52, 0x74, 0xe8, 0x06, 0x68, 0xfe, 0x4a, 0x81, 0x95, 0x02, 0xe2,
+	0x8b, 0x78, 0xde, 0xfb, 0x70, 0x7b, 0x12, 0x5a, 0x27, 0xc3, 0xa4, 0xa5, 0x0a, 0x84, 0x3f, 0x37,
+	0x0f, 0xe1, 0x1c, 0x41, 0x6b, 0x35, 0x07, 0x39, 0x97, 0x9a, 0xff, 0x56, 0xe0, 0xce, 0x2e, 0x45,
+	0x27, 0xc6, 0xdd, 0xc8, 0xf7, 0xb1, 0xcb, 0x6d, 0x4c, 0x3d, 0xe4, 0x6d, 0xa8, 0x05, 0xac, 0x6f,
+	0xc7, 0xe3, 0x21, 0x0a, 0x85, 0x9b, 0xdb, 0x6f, 0xcc, 0x38, 0x6b, 0x8f, 0xf5, 0x0f, 0xc7, 0x43,
+	0xb4, 0xaa, 0x81, 0xfc, 0x20, 0x26, 0x34, 0xba, 0xd9, 0x7e, 0x59, 0x4c, 0x28, 0xc8, 0x38, 0x3d,
+	0x14, 0x4f, 0x3a, 0x6d, 0x41, 0x8f, 0x66, 0xc9, 0x41, 0xf1, 0xa2, 0x95, 0xce, 0x5f, 0xb4, 0x16,
+	0x54, 0x87, 0x34, 0x3a, 0x1b, 0x77, 0xda, 0x82, 0x19, 0xcd, 0x4a, 0x87, 0xe4, 0xcb, 0x50, 0x61,
+	0xdd, 0x01, 0x06, 0x8e, 0xe0, 0xa3, 0xbe, 0x7d, 0x77, 0x2a, 0xb6, 0x3b, 0x7e, 0x74, 0x64, 0x25,
+	0x0b, 0xcd, 0x9f, 0xaa, 0xb0, 0xd6, 0xa6, 0xd1, 0xf0, 0xff, 0xdc, 0xf2, 0x3d, 0x58, 0xce, 0x77,
+	0x97, 0x6e, 0x2d, 0x21, 0xf8, 0x6c, 0x51, 0xe7, 0xe4, 0x89, 0xd9, 0xcc, 0xcd, 0xe5, 0x2e, 0x6f,
+	0x35, 0xbb, 0x85, 0xb1, 0xf9, 0x37, 0x05, 0x56, 0xdf, 0x75, 0xd8, 0xb5, 0x82, 0x92, 0x19, 0xac,
+	0xce, 0x34, 0x58, 0x9b, 0x63, 0x70, 0xe9, 0x52, 0x83, 0xcb, 0x0b, 0x18, 0xfc, 0x4f, 0x05, 0xee,
+	0xb6, 0x91, 0x75, 0xa9, 0x7b, 0x84, 0x2f, 0x8e, 0xd5, 0xbf, 0x54, 0x60, 0xed, 0x60, 0x10, 0x9d,
+	0xde, 0x5c, 0x8b, 0xcd, 0xdf, 0xaa, 0x70, 0x5b, 0xc6, 0xa6, 0xfd, 0x34, 0xfc, 0x7e, 0x4a, 0x17,
+	0x74, 0x1d, 0xea, 0x59, 0xc4, 0xcf, 0xae, 0xe9, 0xa4, 0x28, 0xb7, 0xb4, 0x34, 0xd3, 0xd2, 0xf2,
+	0x1c, 0x4b, 0x2b, 0x45, 0x6e, 0xbf, 0x09, 0xcd, 0xfc, 0xd9, 0x11, 0xd4, 0x56, 0x05, 0xb5, 0x0f,
+	0xa6, 0x53, 0x9b, 0xc1, 0x21, 0x98, 0xcd, 0x5f, 0x2c, 0x41, 0xec, 0x87, 0x2a, 0xac, 0xf2, 0xa8,
+	0xf6, 0x12, 0xb3, 0xab, 0x63, 0xf6, 0x57, 0x05, 0x56, 0xde, 0x75, 0xd8, 0x75, 0x42, 0x76, 0xbd,
+	0x97, 0xff, 0xa2, 0xb1, 0xe5, 0xff, 0xda, 0xd8, 0xbf, 0x2b, 0xd0, 0x4a, 0xe3, 0xdd, 0x8b, 0x61,
+	0x31, 0x7f, 0xd2, 0x78, 0xac, 0xbb, 0xb9, 0xd6, 0x5e, 0x73, 0x70, 0xff, 0x87, 0x0a, 0x4b, 0x9d,
+	0x90, 0x21, 0x8d, 0x9f, 0x9b, 0xa5, 0x6f, 0x5e, 0xd4, 0x58, 0x56, 0x27, 0xe7, 0x74, 0xb9, 0x52,
+	0x8d, 0xc2, 0x71, 0x63, 0xd8, 0xe7, 0x19, 0x69, 0x96, 0xdf, 0xe4, 0x82, 0x62, 0x9a, 0x2f, 0xc3,
+	0xc0, 0x44, 0x9a, 0x3f, 0x81, 0x6a, 0xb5, 0x88, 0xea, 0x1b, 0x00, 0x19, 0xf8, 0xac, 0x55, 0x5b,
+	0xd7, 0x78, 0x9e, 0x9e, 0x4b, 0x78, 0x09, 0x44, 0xa3, 0xd3, 0x4e, 0x9b, 0xb5, 0xf4, 0x75, 0x8d,
+	0x97, 0x40, 0x72, 0x44, 0xbe, 0x02, 0x35, 0x1a, 0x9d, 0xda, 0x3d, 0x27, 0x76, 0x5a, 0x20, 0x92,
+	0xec, 0x39, 0xd9, 0x64, 0x95, 0x46, 0xa7, 0x6d, 0x27, 0x76, 0xcc, 0x67, 0x2a, 0x2c, 0xb5, 0xd1,
+	0xc7, 0x18, 0xff, 0xf7, 0xa0, 0x17, 0x10, 0x2b, 0xcd, 0x41, 0xac, 0x3c, 0x0f, 0xb1, 0xca, 0x05,
+	0xc4, 0xee, 0x43, 0x63, 0x48, 0xdd, 0xc0, 0xa1, 0x63, 0xdb, 0xc3, 0x31, 0x6b, 0x55, 0x05, 0x6e,
+	0xf5, 0x44, 0xf6, 0x08, 0xc7, 0xcc, 0xfc, 0x44, 0x81, 0xa5, 0x03, 0x74, 0x68, 0x77, 0xf0, 0xdc,
+	0x60, 0x98, 0xd0, 0x5f, 0x2b, 0xea, 0x3f, 0x3f, 0x87, 0xfe, 0x3c, 0x18, 0x14, 0xd9, 0xc8, 0x8f,
+	0xed, 0x1c, 0x1c, 0x09, 0xc0, 0xb2, 0x94, 0xef, 0x66, 0x10, 0x6d, 0x41, 0xf9, 0x64, 0x84, 0x74,
+	0x7c, 0x79, 0x35, 0x21, 0xd7, 0x99, 0x7f, 0x52, 0xc0, 0x38, 0x18, 0xb3, 0xdd, 0x28, 0x3c, 0x76,
+	0xfb, 0x37, 0xce, 0x72, 0x02, 0x25, 0xc1, 0x57, 0x79, 0x5d, 0xdb, 0xd0, 0x2d, 0xf1, 0xcd, 0xb9,
+	0xf4, 0x70, 0x6c, 0x0f, 0x29, 0x1e, 0xbb, 0x67, 0x28, 0xd9, 0xd6, 0xad, 0xba, 0x87, 0xe3, 0xfd,
+	0x44, 0x64, 0x7e, 0xa0, 0x42, 0x23, 0xe5, 0x92, 0xe3, 0xb3, 0x88, 0x41, 0x79, 0xf1, 0xab, 0x5e,
+	0xbd, 0xf8, 0x9d, 0x5e, 0x29, 0xcd, 0x8e, 0xa3, 0xf7, 0xa1, 0x21, 0xe8, 0xb0, 0xc3, 0xa8, 0x87,
+	0x19, 0xbb, 0x75, 0x21, 0x7b, 0x2c, 0x44, 0x45, 0xa0, 0x2a, 0x57, 0x71, 0x91, 0xea, 0x74, 0x17,
+	0x21, 0x50, 0x1a, 0xb8, 0xb1, 0x8c, 0x2b, 0x0d, 0x4b, 0x7c, 0x9b, 0xdf, 0x83, 0xfa, 0xa1, 0x1b,
+	0xe0, 0xa1, 0xdb, 0xf5, 0xf6, 0x58, 0x7f, 0x11, 0xb8, 0xf2, 0xf6, 0x8c, 0x5a, 0x68, 0xcf, 0xcc,
+	0x7d, 0x61, 0xcc, 0xef, 0x2b, 0x50, 0x7b, 0xc7, 0x1f, 0xb1, 0xc1, 0x82, 0xa7, 0x17, 0xe2, 0xb1,
+	0x3a, 0x25, 0x1e, 0xcf, 0xd1, 0xe1, 0xe7, 0x0a, 0x54, 0x1f, 0xe1, 0x78, 0xfb, 0x00, 0xfb, 0x82,
+	0x3f, 0x1e, 0x53, 0xd3, 0xb6, 0x8d, 0x18, 0x90, 0x7b, 0x50, 0x9f, 0x88, 0x22, 0xc9, 0xfe, 0x90,
+	0x07, 0x91, 0x4b, 0x9e, 0xd1, 0xbb, 0x50, 0x73, 0x99, 0xfd, 0xc4, 0xf1, 0xdd, 0x9e, 0xe0, 0xbf,
+	0x66, 0x55, 0x5d, 0xf6, 0x1e, 0x1f, 0xf2, 0xf8, 0x95, 0xa9, 0x29, 0xbd, 0x5d, 0xb3, 0x26, 0x24,
+	0xe6, 0xfb, 0x00, 0x89, 0x6a, 0x1c, 0xa0, 0xcc, 0xbb, 0x94, 0x49, 0xef, 0xfa, 0x2a, 0x54, 0x3d,
+	0x1c, 0x6f, 0x33, 0xec, 0x27, 0x1d, 0x96, 0x59, 0xa8, 0x25, 0x3b, 0x59, 0xe9, 0x72, 0xf3, 0x17,
+	0x0a, 0xe8, 0xdf, 0x8a, 0x9c, 0x5e, 0x27, 0xec, 0xe1, 0xd9, 0xf3, 0x83, 0xbf, 0x05, 0xd5, 0x63,
+	0x17, 0xfd, 0x5e, 0x1e, 0x04, 0x92, 0x21, 0x07, 0xd6, 0xe5, 0x67, 0xdb, 0x43, 0x27, 0x1e, 0xb0,
+	0x56, 0x49, 0xdc, 0x68, 0x10, 0xa2, 0x7d, 0x2e, 0x31, 0x9f, 0x29, 0x00, 0x42, 0x3b, 0x7e, 0xcf,
+	0x18, 0x69, 0x43, 0x23, 0x5d, 0x4f, 0x9d, 0x80, 0xb5, 0x14, 0x61, 0xef, 0xfd, 0xa9, 0x37, 0xf3,
+	0x11, 0x8e, 0xdf, 0x73, 0xfc, 0x11, 0xee, 0x3b, 0x2e, 0xb5, 0xea, 0xc9, 0x9e, 0xfc, 0x57, 0xe4,
+	0x4b, 0xb0, 0x1a, 0x8e, 0x02, 0x9b, 0xa2, 0xef, 0xc4, 0xd8, 0xb3, 0x13, 0x45, 0x59, 0xa2, 0x38,
+	0x09, 0x47, 0x81, 0x25, 0xa7, 0x0e, 0x92, 0x19, 0xf3, 0x87, 0x0a, 0xc0, 0x3b, 0x5c, 0x67, 0xa9,
+	0xc6, 0xf9, 0xf2, 0x42, 0x99, 0x52, 0x5e, 0x4c, 0x18, 0xad, 0x16, 0x8d, 0xde, 0x49, 0x8d, 0xe6,
+	0x31, 0x83, 0x25, 0x7d, 0xc7, 0xfb, 0x33, 0xa0, 0xce, 0x8d, 0x4f, 0x70, 0x11, 0xdf, 0xe6, 0xcf,
+	0x64, 0xab, 0x96, 0x6b, 0x27, 0x55, 0x2a, 0x30, 0xa0, 0x9c, 0x67, 0xe0, 0x1e, 0xd4, 0x03, 0x0c,
+	0x22, 0x3a, 0xb6, 0x99, 0xfb, 0x14, 0x53, 0x07, 0x96, 0xa2, 0x03, 0xf7, 0x29, 0x72, 0x17, 0x15,
+	0x90, 0x44, 0xa7, 0x2c, 0xe5, 0x88, 0xc3, 0x10, 0x9d, 0x32, 0xf2, 0x05, 0xb8, 0x45, 0xb1, 0x8b,
+	0x61, 0xec, 0x8f, 0xed, 0x20, 0xea, 0xb9, 0xc7, 0x2e, 0xa6, 0x6e, 0x6c, 0xa4, 0x13, 0x7b, 0x89,
+	0xdc, 0xfc, 0x8b, 0x02, 0xcd, 0x6f, 0xa7, 0xc1, 0x4b, 0x6a, 0xf6, 0x1c, 0x62, 0xca, 0xd7, 0x84,
+	0xb1, 0x05, 0xfc, 0xe6, 0xf4, 0x6d, 0x33, 0x90, 0xac, 0x1a, 0xc3, 0xbe, 0x54, 0x6a, 0x07, 0xea,
+	0x82, 0x8e, 0x64, 0x8f, 0xd2, 0x5c, 0x0e, 0x72, 0xe6, 0x2d, 0x38, 0xce, 0xbe, 0xcd, 0x8f, 0x54,
+	0x20, 0xb2, 0xdc, 0x17, 0x24, 0xdd, 0xb8, 0x1c, 0xfd, 0xcd, 0xe9, 0x39, 0xfa, 0xc5, 0xe4, 0xeb,
+	0x33, 0x20, 0xcd, 0xca, 0x7b, 0x71, 0xba, 0xa5, 0x0b, 0x49, 0x3a, 0x2d, 0xfd, 0x35, 0x2b, 0x5a,
+	0x75, 0x4b, 0x17, 0x12, 0x31, 0xdd, 0x86, 0x06, 0x9e, 0xc5, 0xd4, 0x49, 0xef, 0x64, 0xed, 0xca,
+	0x77, 0x52, 0xfc, 0x4c, 0xde, 0x49, 0xf3, 0x63, 0x15, 0x56, 0xd3, 0x22, 0xef, 0x25, 0x9c, 0x0b,
+	0xc3, 0xf9, 0x67, 0x15, 0x5e, 0x2f, 0xc0, 0xb9, 0x4f, 0xa3, 0x3e, 0x45, 0xc6, 0x5e, 0xc2, 0xba,
+	0x00, 0xac, 0x6f, 0xfd, 0x40, 0x83, 0x6a, 0x82, 0x07, 0xd1, 0xa1, 0xec, 0x3d, 0x8e, 0x42, 0x34,
+	0x5e, 0x21, 0x6b, 0x70, 0xcb, 0x3b, 0xff, 0xa7, 0x84, 0xd1, 0x23, 0x2b, 0xb0, 0xec, 0x15, 0xfb,
+	0xf5, 0x06, 0x12, 0x02, 0x4d, 0xaf, 0xd0, 0xae, 0x36, 0x8e, 0xc9, 0x1d, 0x58, 0xf1, 0x2e, 0x76,
+	0x74, 0x0d, 0xfe, 0xe0, 0x1b, 0x5e, 0xb1, 0xe9, 0xc9, 0x8c, 0x81, 0xd8, 0xe2, 0x1b, 0x18, 0x67,
+	0xd9, 0x3b, 0x33, 0x5c, 0xb2, 0x06, 0x86, 0x77, 0xae, 0xf7, 0x68, 0xfc, 0x5e, 0x21, 0x2b, 0xd0,
+	0xf4, 0x0a, 0xcd, 0x35, 0xe3, 0x0f, 0x0a, 0x21, 0xb0, 0xe4, 0x4d, 0x76, 0x8f, 0x8c, 0x8f, 0x14,
+	0x72, 0x07, 0x88, 0x77, 0xa1, 0xc9, 0x62, 0xfc, 0x51, 0x21, 0xab, 0xb0, 0xec, 0x15, 0x7a, 0x11,
+	0xcc, 0xf8, 0x58, 0x21, 0x0d, 0xa8, 0x7a, 0xb2, 0x60, 0x37, 0x7e, 0xa4, 0x89, 0x91, 0xac, 0x24,
+	0x8d, 0x1f, 0x6b, 0xa4, 0x0e, 0x15, 0x4f, 0xe4, 0x74, 0xc6, 0x4f, 0xe4, 0x94, 0xcc, 0xc8, 0x8d,
+	0x4f, 0x34, 0x71, 0xf2, 0x64, 0x7e, 0x6e, 0xfc, 0x4b, 0x23, 0x4d, 0xd0, 0xbd, 0x34, 0x07, 0x35,
+	0x7e, 0xad, 0x8b, 0x03, 0x8b, 0x4f, 0x88, 0xf1, 0xa1, 0x4e, 0x96, 0x01, 0xbc, 0x2c, 0x55, 0x31,
+	0x7e, 0xa3, 0xbf, 0xf5, 0x36, 0xd4, 0xd2, 0xff, 0xf4, 0x08, 0x40, 0x65, 0xcf, 0x61, 0x31, 0x52,
+	0xe3, 0x15, 0xfe, 0x6d, 0xa1, 0xd3, 0x43, 0x6a, 0x28, 0xfc, 0xfb, 0x3b, 0xd4, 0xe5, 0x72, 0x95,
+	0xd3, 0xb5, 0xcf, 0x5d, 0xce, 0xd0, 0x76, 0xda, 0xdf, 0xdd, 0xe9, 0xbb, 0xf1, 0x60, 0x74, 0xc4,
+	0x09, 0xdf, 0x7a, 0xea, 0xfa, 0xbe, 0xfb, 0x34, 0xc6, 0xee, 0x60, 0x4b, 0x3a, 0xc3, 0x17, 0x7b,
+	0x2e, 0x8b, 0xa9, 0x7b, 0x34, 0x8a, 0xb1, 0xb7, 0x95, 0x5e, 0x83, 0x2d, 0xe1, 0x21, 0xd9, 0x70,
+	0x78, 0x74, 0x54, 0x11, 0x92, 0x87, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xb4, 0xb3, 0x05, 0xc2,
+	0x44, 0x1f, 0x00, 0x00,
 }
diff --git a/internal/proto/master.proto b/internal/proto/master.proto
index 453a0ae28bf386f1d19e874db3840b0ba9d3e1ce..c83a6cd02850c38cf00971da6e951f4978eda5dc 100644
--- a/internal/proto/master.proto
+++ b/internal/proto/master.proto
@@ -102,4 +102,8 @@ service Master {
     rpc AllocID(internal.IDRequest) returns (internal.IDResponse) {}
 
     rpc AssignSegmentID(internal.AssignSegIDRequest) returns (internal.AssignSegIDResponse) {}
+
+    rpc CreateIndex(internal.CreateIndexRequest) returns (common.Status) {}
+    rpc DescribeIndex(internal.DescribeIndexRequest) returns (service.DescribeIndexResponse) {}
+    rpc DescribeIndexProgress(internal.DescribeIndexProgressRequest) returns (service.BoolResponse) {}
 }
diff --git a/internal/proto/masterpb/master.pb.go b/internal/proto/masterpb/master.pb.go
index 48d4b6b455b395011d17489d87e8beb60ff092ad..ef5bfbb2058fd4d95774a7d4d470bfa27382ed3f 100644
--- a/internal/proto/masterpb/master.pb.go
+++ b/internal/proto/masterpb/master.pb.go
@@ -30,38 +30,41 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 func init() { proto.RegisterFile("master.proto", fileDescriptor_f9c348dec43a6705) }
 
 var fileDescriptor_f9c348dec43a6705 = []byte{
-	// 484 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x95, 0xdf, 0x6e, 0xd3, 0x30,
-	0x14, 0x87, 0x7b, 0x35, 0x24, 0xd3, 0x3f, 0xcc, 0xdc, 0x95, 0x1b, 0xd6, 0x9b, 0x41, 0xcb, 0x12,
-	0x04, 0x2f, 0xc0, 0xda, 0x48, 0xac, 0x12, 0x48, 0xd3, 0xb2, 0x1b, 0x40, 0x68, 0x24, 0xd9, 0x21,
-	0x35, 0x24, 0x76, 0xf0, 0x39, 0x19, 0xa2, 0x2f, 0xc1, 0x2b, 0xa3, 0x26, 0x75, 0x52, 0xd3, 0xba,
-	0x94, 0xdd, 0xd5, 0xf6, 0xe7, 0xdf, 0x57, 0x9f, 0x73, 0xa4, 0xb0, 0x6e, 0x1e, 0x21, 0x81, 0xf6,
-	0x0a, 0xad, 0x48, 0xf1, 0xc7, 0xb9, 0xc8, 0xee, 0x4a, 0xac, 0x57, 0x5e, 0x7d, 0x34, 0xec, 0x26,
-	0x2a, 0xcf, 0x95, 0xac, 0x37, 0x87, 0x5c, 0x48, 0x02, 0x2d, 0xa3, 0xec, 0x26, 0xc7, 0x74, 0xbd,
-	0x77, 0x8c, 0xa0, 0xef, 0x44, 0x02, 0xed, 0xd6, 0xab, 0xdf, 0x0f, 0xd9, 0xd1, 0xfb, 0xea, 0x3e,
-	0x8f, 0xd8, 0xa3, 0x99, 0x86, 0x88, 0x60, 0xa6, 0xb2, 0x0c, 0x12, 0x12, 0x4a, 0x72, 0xcf, 0xb3,
-	0x4c, 0x26, 0xd3, 0xfb, 0x1b, 0xbc, 0x82, 0x1f, 0x25, 0x20, 0x0d, 0x9f, 0xd8, 0xfc, 0xfa, 0x1f,
-	0x85, 0x14, 0x51, 0x89, 0xa3, 0x0e, 0xff, 0xcc, 0xfa, 0x81, 0x56, 0xc5, 0x86, 0xe0, 0x85, 0x43,
-	0x60, 0x63, 0x07, 0xc6, 0xc7, 0xac, 0x77, 0x11, 0xe1, 0x46, 0xfa, 0xc4, 0x91, 0x6e, 0x51, 0x26,
-	0x7c, 0x64, 0xc3, 0xeb, 0x5a, 0x79, 0x53, 0xa5, 0xb2, 0x2b, 0xc0, 0x42, 0x49, 0x84, 0x51, 0x87,
-	0x97, 0x8c, 0x07, 0x80, 0x89, 0x16, 0xf1, 0x66, 0x9d, 0x5e, 0xba, 0x9e, 0xb1, 0x85, 0x1a, 0xdb,
-	0x64, 0xb7, 0xad, 0x05, 0xeb, 0xab, 0xc5, 0xea, 0xe7, 0xa8, 0xc3, 0xbf, 0xb3, 0x41, 0xb8, 0x50,
-	0x3f, 0xdb, 0x63, 0x74, 0x96, 0xce, 0xe6, 0x8c, 0xef, 0xd9, 0x6e, 0x5f, 0x48, 0x5a, 0xc8, 0xf4,
-	0x9d, 0x40, 0xda, 0x78, 0xe3, 0x0d, 0x1b, 0xd4, 0x0d, 0xbe, 0x8c, 0x34, 0x89, 0xea, 0x81, 0x67,
-	0x7b, 0x07, 0xa1, 0xe1, 0x0e, 0x6c, 0xd4, 0x27, 0xd6, 0x5b, 0x35, 0xb8, 0x8d, 0x9f, 0xec, 0x19,
-	0x83, 0xff, 0x0d, 0xff, 0xc2, 0xba, 0x17, 0x11, 0xb6, 0xd9, 0x63, 0xf7, 0x10, 0x6c, 0x45, 0x1f,
-	0x36, 0x03, 0x9a, 0x1d, 0x9b, 0xc6, 0xb6, 0x1a, 0xff, 0x1f, 0x23, 0xb0, 0xe5, 0x1a, 0xef, 0x76,
-	0x35, 0x9c, 0x3d, 0x00, 0x82, 0xf5, 0x57, 0x8d, 0x6d, 0x4e, 0xd1, 0x59, 0x33, 0x0b, 0xbb, 0x4f,
-	0xfb, 0x13, 0xd6, 0x7b, 0x0b, 0x14, 0xfe, 0xc2, 0x99, 0x92, 0x5f, 0x45, 0x8a, 0xfc, 0xd4, 0x65,
-	0x32, 0x88, 0xb1, 0x9c, 0x3a, 0x2c, 0x2d, 0xd7, 0x48, 0x3e, 0xb0, 0xfe, 0x79, 0x96, 0xa9, 0xe4,
-	0x5a, 0xe4, 0x80, 0x14, 0xe5, 0x05, 0x3f, 0x71, 0x58, 0xae, 0x51, 0x39, 0xda, 0x63, 0x23, 0x4d,
-	0xf4, 0x25, 0x7b, 0x50, 0x45, 0xcf, 0x03, 0xfe, 0xd4, 0x71, 0x61, 0x1e, 0x98, 0xc8, 0x93, 0x3d,
-	0x44, 0x93, 0xf8, 0x8d, 0x0d, 0xce, 0x11, 0x45, 0x2a, 0x43, 0x48, 0x73, 0x90, 0x34, 0x0f, 0xf8,
-	0x73, 0xc7, 0xbd, 0x86, 0x6b, 0x15, 0xe3, 0x43, 0x50, 0xe3, 0x9a, 0x4e, 0x3f, 0xbe, 0x49, 0x05,
-	0x2d, 0xca, 0x78, 0x35, 0xd8, 0xfe, 0x52, 0x64, 0x99, 0x58, 0x12, 0x24, 0x0b, 0xbf, 0x0e, 0x39,
-	0xbb, 0x15, 0x48, 0x5a, 0xc4, 0x25, 0xc1, 0xad, 0x6f, 0xa2, 0xfc, 0x2a, 0xd9, 0xaf, 0x3f, 0x04,
-	0x45, 0x1c, 0x1f, 0x55, 0xeb, 0xd7, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x8d, 0x75, 0x7d, 0xec,
-	0x36, 0x06, 0x00, 0x00,
+	// 538 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x95, 0x5f, 0x6f, 0xd3, 0x3c,
+	0x14, 0x87, 0x7b, 0xb5, 0x57, 0xf2, 0xdb, 0x3f, 0xcc, 0x88, 0x9b, 0x72, 0xc3, 0x7a, 0x33, 0x68,
+	0x59, 0x82, 0xd8, 0x17, 0x60, 0x6d, 0x24, 0x56, 0x09, 0xa4, 0x6a, 0x99, 0x84, 0x00, 0xa1, 0x91,
+	0xa4, 0x87, 0xd4, 0x2c, 0xb1, 0x83, 0x8f, 0x33, 0x60, 0xdf, 0x90, 0x6f, 0x85, 0x9a, 0xd4, 0x49,
+	0xbc, 0xd6, 0x5d, 0xc6, 0x5d, 0x13, 0x3f, 0xe7, 0xf7, 0xd4, 0x3e, 0xc7, 0x2d, 0xe9, 0xa6, 0x01,
+	0x2a, 0x90, 0x4e, 0x26, 0x85, 0x12, 0xf4, 0x71, 0xca, 0x92, 0x9b, 0x1c, 0xcb, 0x27, 0xa7, 0x5c,
+	0x1a, 0x76, 0x23, 0x91, 0xa6, 0x82, 0x97, 0x2f, 0x87, 0x94, 0x71, 0x05, 0x92, 0x07, 0xc9, 0x55,
+	0x8a, 0xf1, 0xe6, 0xdd, 0x21, 0x82, 0xbc, 0x61, 0x11, 0xd4, 0xaf, 0x5e, 0xff, 0xe9, 0x91, 0x83,
+	0xf7, 0x45, 0x3d, 0x0d, 0xc8, 0xa3, 0x99, 0x84, 0x40, 0xc1, 0x4c, 0x24, 0x09, 0x44, 0x8a, 0x09,
+	0x4e, 0x1d, 0xc7, 0x30, 0xe9, 0x4c, 0xe7, 0x2e, 0x78, 0x01, 0x3f, 0x72, 0x40, 0x35, 0x7c, 0x6a,
+	0xf2, 0x9b, 0x6f, 0xe4, 0xab, 0x40, 0xe5, 0x38, 0xea, 0xd0, 0x2f, 0xa4, 0xef, 0x49, 0x91, 0x35,
+	0x04, 0x2f, 0x2d, 0x02, 0x13, 0x6b, 0x19, 0x1f, 0x92, 0xde, 0x79, 0x80, 0x8d, 0xf4, 0x89, 0x25,
+	0xdd, 0xa0, 0x74, 0xf8, 0xc8, 0x84, 0x37, 0x67, 0xe5, 0x4c, 0x85, 0x48, 0x2e, 0x00, 0x33, 0xc1,
+	0x11, 0x46, 0x1d, 0x9a, 0x13, 0xea, 0x01, 0x46, 0x92, 0x85, 0xcd, 0x73, 0x7a, 0x65, 0xdb, 0xc6,
+	0x16, 0xaa, 0x6d, 0x93, 0xdd, 0xb6, 0x1a, 0x2c, 0x4b, 0xb3, 0xf5, 0xc7, 0x51, 0x87, 0x5e, 0x93,
+	0x81, 0xbf, 0x12, 0x3f, 0xeb, 0x65, 0xb4, 0x1e, 0x9d, 0xc9, 0x69, 0xdf, 0xf3, 0xdd, 0x3e, 0x5f,
+	0x49, 0xc6, 0xe3, 0x77, 0x0c, 0x55, 0x63, 0x8f, 0x57, 0x64, 0x50, 0x36, 0x78, 0x11, 0x48, 0xc5,
+	0x8a, 0x0d, 0x9e, 0xec, 0x1d, 0x84, 0x8a, 0x6b, 0xd9, 0xa8, 0xcf, 0xa4, 0xb7, 0x6e, 0x70, 0x1d,
+	0x3f, 0xd9, 0x33, 0x06, 0x0f, 0x0d, 0xff, 0x4a, 0xba, 0xe7, 0x01, 0xd6, 0xd9, 0x63, 0xfb, 0x10,
+	0x6c, 0x45, 0xb7, 0x9b, 0x01, 0x49, 0x0e, 0x75, 0x63, 0x6b, 0x8d, 0x7b, 0xcf, 0x08, 0x6c, 0xb9,
+	0xc6, 0xbb, 0x5d, 0x15, 0x67, 0x0e, 0x00, 0x23, 0xfd, 0x75, 0x63, 0xab, 0x55, 0xb4, 0x9e, 0x99,
+	0x81, 0xfd, 0x4b, 0xfb, 0x23, 0xd2, 0x7b, 0x0b, 0xca, 0xff, 0x8d, 0x33, 0xc1, 0xbf, 0xb1, 0x18,
+	0xe9, 0xb1, 0xcd, 0xa4, 0x11, 0x6d, 0x39, 0xb6, 0x58, 0x6a, 0xae, 0x92, 0x7c, 0x24, 0xfd, 0xb3,
+	0x24, 0x11, 0xd1, 0x25, 0x4b, 0x01, 0x55, 0x90, 0x66, 0xf4, 0xc8, 0x62, 0xb9, 0x44, 0x61, 0x69,
+	0x8f, 0x89, 0x54, 0xd1, 0x0b, 0xf2, 0x5f, 0x11, 0x3d, 0xf7, 0xe8, 0x33, 0x4b, 0xc1, 0xdc, 0xd3,
+	0x91, 0x47, 0x7b, 0x88, 0x2a, 0xf1, 0x3b, 0x19, 0x9c, 0x21, 0xb2, 0x98, 0xfb, 0x10, 0xa7, 0xc0,
+	0xd5, 0xdc, 0xa3, 0x2f, 0x2c, 0x75, 0x15, 0x57, 0x2b, 0xc6, 0x6d, 0xd0, 0xca, 0xf5, 0x81, 0xfc,
+	0x5f, 0x5e, 0xaa, 0x39, 0x5f, 0xc2, 0x2f, 0xab, 0xa7, 0xc1, 0xb4, 0xbc, 0x17, 0xd7, 0xa4, 0xa7,
+	0x67, 0xb1, 0x8c, 0x9e, 0xdc, 0x33, 0xb1, 0x46, 0xb8, 0xe5, 0xf7, 0xea, 0x0e, 0xdb, 0xb8, 0x22,
+	0x4f, 0x8c, 0xa5, 0x85, 0x14, 0xb1, 0x04, 0x44, 0x7a, 0xda, 0x46, 0xaa, 0xe9, 0x07, 0x5d, 0xcb,
+	0xe9, 0xf4, 0xd3, 0x9b, 0x98, 0xa9, 0x55, 0x1e, 0xae, 0xb7, 0xee, 0xde, 0xb2, 0x24, 0x61, 0xb7,
+	0x0a, 0xa2, 0x95, 0x5b, 0x16, 0x9f, 0x2c, 0x19, 0x2a, 0xc9, 0xc2, 0x5c, 0xc1, 0xd2, 0xd5, 0x5e,
+	0xb7, 0x48, 0x74, 0xcb, 0xbf, 0xd0, 0x2c, 0x0c, 0x0f, 0x8a, 0xe7, 0xd3, 0xbf, 0x01, 0x00, 0x00,
+	0xff, 0xff, 0x42, 0xb7, 0x2a, 0xc4, 0x70, 0x07, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -146,6 +149,9 @@ type MasterClient interface {
 	AllocTimestamp(ctx context.Context, in *internalpb.TsoRequest, opts ...grpc.CallOption) (*internalpb.TsoResponse, error)
 	AllocID(ctx context.Context, in *internalpb.IDRequest, opts ...grpc.CallOption) (*internalpb.IDResponse, error)
 	AssignSegmentID(ctx context.Context, in *internalpb.AssignSegIDRequest, opts ...grpc.CallOption) (*internalpb.AssignSegIDResponse, error)
+	CreateIndex(ctx context.Context, in *internalpb.CreateIndexRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
+	DescribeIndex(ctx context.Context, in *internalpb.DescribeIndexRequest, opts ...grpc.CallOption) (*servicepb.DescribeIndexResponse, error)
+	DescribeIndexProgress(ctx context.Context, in *internalpb.DescribeIndexProgressRequest, opts ...grpc.CallOption) (*servicepb.BoolResponse, error)
 }
 
 type masterClient struct {
@@ -282,6 +288,33 @@ func (c *masterClient) AssignSegmentID(ctx context.Context, in *internalpb.Assig
 	return out, nil
 }
 
+func (c *masterClient) CreateIndex(ctx context.Context, in *internalpb.CreateIndexRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
+	out := new(commonpb.Status)
+	err := c.cc.Invoke(ctx, "/milvus.proto.master.Master/CreateIndex", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *masterClient) DescribeIndex(ctx context.Context, in *internalpb.DescribeIndexRequest, opts ...grpc.CallOption) (*servicepb.DescribeIndexResponse, error) {
+	out := new(servicepb.DescribeIndexResponse)
+	err := c.cc.Invoke(ctx, "/milvus.proto.master.Master/DescribeIndex", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *masterClient) DescribeIndexProgress(ctx context.Context, in *internalpb.DescribeIndexProgressRequest, opts ...grpc.CallOption) (*servicepb.BoolResponse, error) {
+	out := new(servicepb.BoolResponse)
+	err := c.cc.Invoke(ctx, "/milvus.proto.master.Master/DescribeIndexProgress", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // MasterServer is the server API for Master service.
 type MasterServer interface {
 	//*
@@ -354,6 +387,9 @@ type MasterServer interface {
 	AllocTimestamp(context.Context, *internalpb.TsoRequest) (*internalpb.TsoResponse, error)
 	AllocID(context.Context, *internalpb.IDRequest) (*internalpb.IDResponse, error)
 	AssignSegmentID(context.Context, *internalpb.AssignSegIDRequest) (*internalpb.AssignSegIDResponse, error)
+	CreateIndex(context.Context, *internalpb.CreateIndexRequest) (*commonpb.Status, error)
+	DescribeIndex(context.Context, *internalpb.DescribeIndexRequest) (*servicepb.DescribeIndexResponse, error)
+	DescribeIndexProgress(context.Context, *internalpb.DescribeIndexProgressRequest) (*servicepb.BoolResponse, error)
 }
 
 // UnimplementedMasterServer can be embedded to have forward compatible implementations.
@@ -402,6 +438,15 @@ func (*UnimplementedMasterServer) AllocID(ctx context.Context, req *internalpb.I
 func (*UnimplementedMasterServer) AssignSegmentID(ctx context.Context, req *internalpb.AssignSegIDRequest) (*internalpb.AssignSegIDResponse, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method AssignSegmentID not implemented")
 }
+func (*UnimplementedMasterServer) CreateIndex(ctx context.Context, req *internalpb.CreateIndexRequest) (*commonpb.Status, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateIndex not implemented")
+}
+func (*UnimplementedMasterServer) DescribeIndex(ctx context.Context, req *internalpb.DescribeIndexRequest) (*servicepb.DescribeIndexResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DescribeIndex not implemented")
+}
+func (*UnimplementedMasterServer) DescribeIndexProgress(ctx context.Context, req *internalpb.DescribeIndexProgressRequest) (*servicepb.BoolResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DescribeIndexProgress not implemented")
+}
 
 func RegisterMasterServer(s *grpc.Server, srv MasterServer) {
 	s.RegisterService(&_Master_serviceDesc, srv)
@@ -659,6 +704,60 @@ func _Master_AssignSegmentID_Handler(srv interface{}, ctx context.Context, dec f
 	return interceptor(ctx, in, info, handler)
 }
 
+func _Master_CreateIndex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(internalpb.CreateIndexRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MasterServer).CreateIndex(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/milvus.proto.master.Master/CreateIndex",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MasterServer).CreateIndex(ctx, req.(*internalpb.CreateIndexRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Master_DescribeIndex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(internalpb.DescribeIndexRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MasterServer).DescribeIndex(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/milvus.proto.master.Master/DescribeIndex",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MasterServer).DescribeIndex(ctx, req.(*internalpb.DescribeIndexRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Master_DescribeIndexProgress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(internalpb.DescribeIndexProgressRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MasterServer).DescribeIndexProgress(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/milvus.proto.master.Master/DescribeIndexProgress",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MasterServer).DescribeIndexProgress(ctx, req.(*internalpb.DescribeIndexProgressRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _Master_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "milvus.proto.master.Master",
 	HandlerType: (*MasterServer)(nil),
@@ -719,6 +818,18 @@ var _Master_serviceDesc = grpc.ServiceDesc{
 			MethodName: "AssignSegmentID",
 			Handler:    _Master_AssignSegmentID_Handler,
 		},
+		{
+			MethodName: "CreateIndex",
+			Handler:    _Master_CreateIndex_Handler,
+		},
+		{
+			MethodName: "DescribeIndex",
+			Handler:    _Master_DescribeIndex_Handler,
+		},
+		{
+			MethodName: "DescribeIndexProgress",
+			Handler:    _Master_DescribeIndexProgress_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "master.proto",
diff --git a/internal/proto/service.proto b/internal/proto/service.proto
index 20b5f0cf29d8132e3b43ae8978711e8733c6cccd..bde0dbddeaed7b05d1d946e50389de4d9510103f 100644
--- a/internal/proto/service.proto
+++ b/internal/proto/service.proto
@@ -105,4 +105,31 @@ service MilvusService {
      * @return QueryResult
      */
     rpc Search(Query) returns (QueryResult) {}
+
+    /**
+     * @brief This method is used to build index by collection in sync mode.
+     *
+     * @param IndexParam, index paramters.
+     *
+     * @return Status
+     */
+    rpc CreateIndex(IndexParam) returns (common.Status) {}
+
+    /**
+     * @brief This method is used to describe index
+     *
+     * @param IndexParam, target index.
+     *
+     * @return IndexParam
+     */
+    rpc DescribeIndex(IndexParam) returns (DescribeIndexResponse) {}
+
+    /**
+     * @brief This method is used to query index building progress
+     *
+     * @param IndexParam, target index.
+     *
+     * @return IndexParam
+     */
+    rpc DescribeIndexProgress(IndexParam) returns (BoolResponse) {}
 }
\ No newline at end of file
diff --git a/internal/proto/service_msg.proto b/internal/proto/service_msg.proto
index 1425da34431d6294b50ffcc152911a68abea6f93..094b276efc12859b25edb6d6ff6788b32dbacfbe 100644
--- a/internal/proto/service_msg.proto
+++ b/internal/proto/service_msg.proto
@@ -162,3 +162,34 @@ message QueryResult {
     repeated bytes hits = 2;
 }
 
+
+/**
+ * @brief Index params
+ * @collection_name: target collection
+ * @field_name: target field
+ * @index_name: a name for index provided by user, unique within this field
+ * @extra_params: index parameters in json format
+ *    for vector field:
+ *        extra_params["index_type"] = one of the values: FLAT, IVF_LAT, IVF_SQ8, NSGMIX, IVFSQ8H,
+ *                                                        PQ, HNSW, HNSW_SQ8NM, ANNOY
+ *        extra_params["metric_type"] = one of the values: L2, IP, HAMMING, JACCARD, TANIMOTO
+ *                                                         SUBSTRUCTURE, SUPERSTRUCTURE
+ *        extra_params["params"] = extra parameters for index, for example ivflat: {nlist: 2048}
+ *    for structured field:
+ *        extra_params["index_type"] = one of the values: SORTED
+ */
+ message IndexParam {
+    string collection_name = 2;
+    string field_name = 3;
+    string index_name = 4;
+    repeated common.KeyValuePair extra_params = 5;
+}
+
+message DescribeIndexResponse {
+    common.Status status = 1;
+    string collection_name = 2;
+    string field_name = 3;
+    string index_name = 4;
+    repeated common.KeyValuePair extra_params = 5;
+}
+
diff --git a/internal/proto/servicepb/service.pb.go b/internal/proto/servicepb/service.pb.go
index 7c471c891a55d37957dd53182b895a1c0e2a1f42..92277112d3ec2fa22cd81fefc3f6cb7d0d05d295 100644
--- a/internal/proto/servicepb/service.pb.go
+++ b/internal/proto/servicepb/service.pb.go
@@ -29,33 +29,36 @@ const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
 func init() { proto.RegisterFile("service.proto", fileDescriptor_a0b84a42fa06f626) }
 
 var fileDescriptor_a0b84a42fa06f626 = []byte{
-	// 412 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x92, 0x51, 0x6b, 0xd4, 0x40,
-	0x10, 0xc7, 0xf3, 0x74, 0xc8, 0x72, 0x69, 0xed, 0xe2, 0x53, 0x0a, 0x82, 0x51, 0x41, 0x14, 0x13,
-	0xd0, 0x4f, 0xe0, 0x5d, 0x85, 0x56, 0x54, 0x34, 0xa1, 0x62, 0xf5, 0x41, 0x36, 0xdb, 0x31, 0x59,
-	0xd8, 0xec, 0x86, 0x9d, 0x49, 0x4b, 0xfb, 0x51, 0xfd, 0x34, 0x92, 0x6c, 0xec, 0xe5, 0x20, 0x7a,
-	0x17, 0xf0, 0x2d, 0xfb, 0x9f, 0xff, 0xfc, 0x76, 0x26, 0xff, 0x65, 0x21, 0x82, 0xbb, 0x52, 0x12,
-	0x92, 0xc6, 0x59, 0xb2, 0xfc, 0x41, 0xad, 0xf4, 0x55, 0x8b, 0xfe, 0x94, 0x0c, 0xb5, 0x68, 0x29,
-	0x6d, 0x5d, 0x5b, 0xe3, 0xd5, 0xe8, 0x68, 0x90, 0x7f, 0xd4, 0x58, 0x0e, 0xd2, 0x12, 0x65, 0x05,
-	0xb5, 0xf0, 0xa7, 0x57, 0xbf, 0xee, 0xb1, 0xf0, 0x43, 0xcf, 0xc9, 0xbd, 0x93, 0x7f, 0x65, 0xf7,
-	0xd7, 0x0e, 0x04, 0xc1, 0xda, 0x6a, 0x0d, 0x92, 0x94, 0x35, 0xfc, 0x69, 0xb2, 0x7d, 0x97, 0x27,
-	0x6c, 0x0c, 0x79, 0x2f, 0x44, 0xc7, 0xdb, 0xb6, 0x61, 0x92, 0x9c, 0x04, 0xb5, 0x18, 0x07, 0xfc,
-	0x9c, 0x1d, 0x9c, 0x38, 0xdb, 0x8c, 0xb8, 0x4f, 0x92, 0xa9, 0x1d, 0x46, 0xe0, 0x8f, 0xa2, 0x86,
-	0x5d, 0xd8, 0xef, 0x2c, 0x3c, 0x15, 0x38, 0x9b, 0x1a, 0x4f, 0xbb, 0x56, 0xd6, 0xea, 0x0c, 0xb0,
-	0xb1, 0x06, 0x21, 0x0e, 0xb8, 0x62, 0xfc, 0x04, 0x50, 0x3a, 0x55, 0xc0, 0xec, 0x1b, 0x5e, 0xec,
-	0x72, 0x79, 0x72, 0xd3, 0x7d, 0xc6, 0x01, 0xbf, 0x60, 0x87, 0x79, 0x65, 0xaf, 0x37, 0x65, 0xe4,
-	0xd1, 0xe4, 0xe6, 0x6f, 0xeb, 0x86, 0x6e, 0xa2, 0x67, 0xd3, 0xf4, 0x9c, 0x9c, 0x32, 0xe5, 0x7b,
-	0x85, 0x34, 0xda, 0xe2, 0x9c, 0x1d, 0xfa, 0x4c, 0x3f, 0x09, 0x47, 0xaa, 0x5f, 0xe1, 0xf1, 0x74,
-	0xfb, 0x9d, 0x61, 0x9f, 0x3f, 0x9f, 0xb3, 0xb0, 0x0b, 0xf4, 0xff, 0x42, 0x2f, 0xd8, 0xf2, 0x54,
-	0xe0, 0x4c, 0xe6, 0x7e, 0x61, 0xfe, 0x64, 0x47, 0x7f, 0xc2, 0x9c, 0xc9, 0x7f, 0xbe, 0xc3, 0xb4,
-	0x9d, 0x64, 0xc1, 0x0e, 0xba, 0x24, 0xef, 0xaa, 0xb8, 0xe7, 0x83, 0x99, 0x13, 0xe9, 0x17, 0xb6,
-	0x38, 0x33, 0x08, 0x8e, 0xf8, 0xc3, 0xe9, 0xae, 0xcc, 0x5e, 0xaf, 0x04, 0xc9, 0xea, 0x6f, 0xb3,
-	0x9f, 0x19, 0x82, 0x12, 0x5c, 0x26, 0x4c, 0x09, 0x23, 0xee, 0x3b, 0xb6, 0xc8, 0x41, 0x38, 0x59,
-	0xf1, 0xe3, 0xe9, 0xbe, 0xcf, 0x2d, 0xb8, 0x9b, 0xe8, 0xd1, 0x3f, 0x8a, 0x19, 0x60, 0xab, 0x29,
-	0x0e, 0x56, 0xeb, 0x6f, 0x6f, 0x4a, 0x45, 0x55, 0x5b, 0x74, 0x21, 0xa7, 0xb7, 0x4a, 0x6b, 0x75,
-	0x4b, 0x20, 0xab, 0xd4, 0xf7, 0xbe, 0xbc, 0x54, 0x48, 0x4e, 0x15, 0x2d, 0xc1, 0x65, 0xaa, 0x0c,
-	0x81, 0x33, 0x42, 0xa7, 0x3d, 0x30, 0x1d, 0x80, 0x4d, 0x51, 0x2c, 0x7a, 0xe1, 0xf5, 0xef, 0x00,
-	0x00, 0x00, 0xff, 0xff, 0x36, 0x07, 0xbc, 0xa2, 0xfe, 0x04, 0x00, 0x00,
+	// 464 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x93, 0xcf, 0x6e, 0xd3, 0x40,
+	0x10, 0xc6, 0x73, 0xca, 0x61, 0x88, 0x5b, 0xba, 0x82, 0x8b, 0x2b, 0x21, 0x30, 0x20, 0x21, 0x10,
+	0xb1, 0x04, 0x4f, 0x40, 0x52, 0xa4, 0x06, 0x41, 0x15, 0x62, 0x15, 0x51, 0x38, 0x94, 0xb5, 0x33,
+	0xd8, 0x2b, 0xd9, 0xbb, 0xd6, 0xce, 0xb8, 0xff, 0xde, 0x99, 0x77, 0x40, 0xb1, 0xdd, 0xd6, 0x96,
+	0x1c, 0x62, 0x4b, 0xdc, 0xb2, 0x33, 0xdf, 0xfc, 0x76, 0xbf, 0x7c, 0x63, 0x70, 0x08, 0xed, 0x85,
+	0x8a, 0x70, 0x9a, 0x5b, 0xc3, 0x46, 0x3c, 0xca, 0x54, 0x7a, 0x51, 0x50, 0x75, 0x9a, 0xd6, 0x3d,
+	0x77, 0x12, 0x99, 0x2c, 0x33, 0xba, 0xaa, 0xba, 0x07, 0x75, 0xf9, 0x3c, 0xa3, 0xb8, 0x2e, 0x4d,
+	0x28, 0x4a, 0x30, 0x93, 0xd5, 0xe9, 0xdd, 0x1f, 0x00, 0xe7, 0x4b, 0xc9, 0x09, 0x2a, 0xa5, 0xf8,
+	0x0e, 0x0f, 0xe7, 0x16, 0x25, 0xe3, 0xdc, 0xa4, 0x29, 0x46, 0xac, 0x8c, 0x16, 0x2f, 0xa7, 0xed,
+	0xbb, 0x2a, 0xc2, 0xbd, 0x20, 0x28, 0x0b, 0xee, 0x61, 0x5b, 0x56, 0xbf, 0x24, 0x60, 0xc9, 0x05,
+	0x79, 0x23, 0x71, 0x0a, 0x7b, 0x47, 0xd6, 0xe4, 0x0d, 0xee, 0x8b, 0x69, 0x97, 0x87, 0x06, 0xf8,
+	0x44, 0x66, 0xb8, 0x0b, 0xfb, 0x13, 0x9c, 0x63, 0x49, 0x83, 0xa9, 0x5e, 0xb7, 0x6a, 0x66, 0x4c,
+	0xba, 0x42, 0xca, 0x8d, 0x26, 0xf4, 0x46, 0x42, 0x81, 0x38, 0x42, 0x8a, 0xac, 0x0a, 0x71, 0xf0,
+	0x0d, 0x6f, 0x76, 0xa9, 0x2a, 0x72, 0xbe, 0xf9, 0xe9, 0x8d, 0xc4, 0x19, 0xec, 0x07, 0x89, 0xb9,
+	0xbc, 0x6f, 0x93, 0x70, 0x3b, 0x9d, 0x7f, 0xcc, 0x72, 0xbe, 0x76, 0x5f, 0x75, 0xd3, 0x03, 0xb6,
+	0x4a, 0xc7, 0x9f, 0x15, 0x71, 0xc3, 0xc5, 0x29, 0xec, 0x57, 0x99, 0x2e, 0xa5, 0x65, 0x55, 0x5a,
+	0x78, 0xde, 0x3d, 0x7e, 0x27, 0xe8, 0xf3, 0xcf, 0x07, 0xe0, 0x6c, 0x02, 0xfd, 0xbf, 0xd0, 0x33,
+	0x98, 0x1c, 0x4b, 0x1a, 0xc8, 0xec, 0x17, 0xe6, 0x6f, 0x38, 0xb8, 0x0d, 0x73, 0x20, 0xff, 0xf5,
+	0x0e, 0x51, 0x3b, 0xc9, 0x10, 0xf6, 0x36, 0x49, 0xde, 0x75, 0xa9, 0xe7, 0xc2, 0x0c, 0x89, 0xf4,
+	0x1b, 0x8c, 0x17, 0x9a, 0xd0, 0xb2, 0x78, 0xd2, 0x3d, 0xb5, 0x32, 0x97, 0x33, 0xc9, 0x51, 0xb2,
+	0xed, 0xed, 0x0b, 0xcd, 0x18, 0xa3, 0x5d, 0x49, 0x1d, 0x63, 0x83, 0xfb, 0x09, 0xc6, 0x01, 0x4a,
+	0x1b, 0x25, 0xe2, 0xb0, 0x7b, 0xee, 0x6b, 0x81, 0xf6, 0xda, 0x7d, 0xf6, 0x8f, 0xe6, 0x0a, 0xa9,
+	0x48, 0xd9, 0x1b, 0x89, 0x13, 0x78, 0x50, 0xad, 0xdd, 0x42, 0xaf, 0xf1, 0x4a, 0x3c, 0xdd, 0xf6,
+	0x90, 0x35, 0x5e, 0x2d, 0xa5, 0x95, 0xd9, 0xae, 0xd5, 0xf8, 0x05, 0xce, 0x6d, 0x7e, 0x7d, 0x89,
+	0x5b, 0xbe, 0xc1, 0x16, 0xa6, 0xe1, 0xfe, 0x1c, 0x1e, 0xb7, 0x5a, 0x4b, 0x6b, 0x62, 0x8b, 0x44,
+	0x3d, 0x6e, 0xea, 0xb5, 0x82, 0xb3, 0xf9, 0x8f, 0x0f, 0xb1, 0xe2, 0xa4, 0x08, 0x37, 0xe6, 0xfc,
+	0x1b, 0x95, 0xa6, 0xea, 0x86, 0x31, 0x4a, 0xfc, 0x6a, 0xf8, 0xed, 0x5a, 0x11, 0x5b, 0x15, 0x16,
+	0x8c, 0x6b, 0x5f, 0x69, 0x46, 0xab, 0x65, 0xea, 0x97, 0x44, 0xbf, 0x26, 0xe6, 0x61, 0x38, 0x2e,
+	0x0b, 0xef, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x9b, 0xf8, 0xbc, 0x74, 0x11, 0x06, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -144,6 +147,27 @@ type MilvusServiceClient interface {
 	//
 	// @return QueryResult
 	Search(ctx context.Context, in *Query, opts ...grpc.CallOption) (*QueryResult, error)
+	//*
+	// @brief This method is used to build index by collection in sync mode.
+	//
+	// @param IndexParam, index paramters.
+	//
+	// @return Status
+	CreateIndex(ctx context.Context, in *IndexParam, opts ...grpc.CallOption) (*commonpb.Status, error)
+	//*
+	// @brief This method is used to describe index
+	//
+	// @param IndexParam, target index.
+	//
+	// @return IndexParam
+	DescribeIndex(ctx context.Context, in *IndexParam, opts ...grpc.CallOption) (*DescribeIndexResponse, error)
+	//*
+	// @brief This method is used to query index building progress
+	//
+	// @param IndexParam, target index.
+	//
+	// @return IndexParam
+	DescribeIndexProgress(ctx context.Context, in *IndexParam, opts ...grpc.CallOption) (*BoolResponse, error)
 }
 
 type milvusServiceClient struct {
@@ -262,6 +286,33 @@ func (c *milvusServiceClient) Search(ctx context.Context, in *Query, opts ...grp
 	return out, nil
 }
 
+func (c *milvusServiceClient) CreateIndex(ctx context.Context, in *IndexParam, opts ...grpc.CallOption) (*commonpb.Status, error) {
+	out := new(commonpb.Status)
+	err := c.cc.Invoke(ctx, "/milvus.proto.service.MilvusService/CreateIndex", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *milvusServiceClient) DescribeIndex(ctx context.Context, in *IndexParam, opts ...grpc.CallOption) (*DescribeIndexResponse, error) {
+	out := new(DescribeIndexResponse)
+	err := c.cc.Invoke(ctx, "/milvus.proto.service.MilvusService/DescribeIndex", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *milvusServiceClient) DescribeIndexProgress(ctx context.Context, in *IndexParam, opts ...grpc.CallOption) (*BoolResponse, error) {
+	out := new(BoolResponse)
+	err := c.cc.Invoke(ctx, "/milvus.proto.service.MilvusService/DescribeIndexProgress", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // MilvusServiceServer is the server API for MilvusService service.
 type MilvusServiceServer interface {
 	//*
@@ -338,6 +389,27 @@ type MilvusServiceServer interface {
 	//
 	// @return QueryResult
 	Search(context.Context, *Query) (*QueryResult, error)
+	//*
+	// @brief This method is used to build index by collection in sync mode.
+	//
+	// @param IndexParam, index paramters.
+	//
+	// @return Status
+	CreateIndex(context.Context, *IndexParam) (*commonpb.Status, error)
+	//*
+	// @brief This method is used to describe index
+	//
+	// @param IndexParam, target index.
+	//
+	// @return IndexParam
+	DescribeIndex(context.Context, *IndexParam) (*DescribeIndexResponse, error)
+	//*
+	// @brief This method is used to query index building progress
+	//
+	// @param IndexParam, target index.
+	//
+	// @return IndexParam
+	DescribeIndexProgress(context.Context, *IndexParam) (*BoolResponse, error)
 }
 
 // UnimplementedMilvusServiceServer can be embedded to have forward compatible implementations.
@@ -380,6 +452,15 @@ func (*UnimplementedMilvusServiceServer) Insert(ctx context.Context, req *RowBat
 func (*UnimplementedMilvusServiceServer) Search(ctx context.Context, req *Query) (*QueryResult, error) {
 	return nil, status.Errorf(codes.Unimplemented, "method Search not implemented")
 }
+func (*UnimplementedMilvusServiceServer) CreateIndex(ctx context.Context, req *IndexParam) (*commonpb.Status, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method CreateIndex not implemented")
+}
+func (*UnimplementedMilvusServiceServer) DescribeIndex(ctx context.Context, req *IndexParam) (*DescribeIndexResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DescribeIndex not implemented")
+}
+func (*UnimplementedMilvusServiceServer) DescribeIndexProgress(ctx context.Context, req *IndexParam) (*BoolResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DescribeIndexProgress not implemented")
+}
 
 func RegisterMilvusServiceServer(s *grpc.Server, srv MilvusServiceServer) {
 	s.RegisterService(&_MilvusService_serviceDesc, srv)
@@ -601,6 +682,60 @@ func _MilvusService_Search_Handler(srv interface{}, ctx context.Context, dec fun
 	return interceptor(ctx, in, info, handler)
 }
 
+func _MilvusService_CreateIndex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(IndexParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MilvusServiceServer).CreateIndex(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/milvus.proto.service.MilvusService/CreateIndex",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MilvusServiceServer).CreateIndex(ctx, req.(*IndexParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _MilvusService_DescribeIndex_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(IndexParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MilvusServiceServer).DescribeIndex(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/milvus.proto.service.MilvusService/DescribeIndex",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MilvusServiceServer).DescribeIndex(ctx, req.(*IndexParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _MilvusService_DescribeIndexProgress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(IndexParam)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(MilvusServiceServer).DescribeIndexProgress(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/milvus.proto.service.MilvusService/DescribeIndexProgress",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(MilvusServiceServer).DescribeIndexProgress(ctx, req.(*IndexParam))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _MilvusService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "milvus.proto.service.MilvusService",
 	HandlerType: (*MilvusServiceServer)(nil),
@@ -653,6 +788,18 @@ var _MilvusService_serviceDesc = grpc.ServiceDesc{
 			MethodName: "Search",
 			Handler:    _MilvusService_Search_Handler,
 		},
+		{
+			MethodName: "CreateIndex",
+			Handler:    _MilvusService_CreateIndex_Handler,
+		},
+		{
+			MethodName: "DescribeIndex",
+			Handler:    _MilvusService_DescribeIndex_Handler,
+		},
+		{
+			MethodName: "DescribeIndexProgress",
+			Handler:    _MilvusService_DescribeIndexProgress_Handler,
+		},
 	},
 	Streams:  []grpc.StreamDesc{},
 	Metadata: "service.proto",
diff --git a/internal/proto/servicepb/service_msg.pb.go b/internal/proto/servicepb/service_msg.pb.go
index 7c5a4fbaab1d2b6e25216db240ff29e2235857dc..a1e822c9ee8fe8d32989f44e17c1654136152edf 100644
--- a/internal/proto/servicepb/service_msg.pb.go
+++ b/internal/proto/servicepb/service_msg.pb.go
@@ -900,6 +900,154 @@ func (m *QueryResult) GetHits() [][]byte {
 	return nil
 }
 
+//*
+// @brief Index params
+// @collection_name: target collection
+// @field_name: target field
+// @index_name: a name for index provided by user, unique within this field
+// @extra_params: index parameters in json format
+//    for vector field:
+//        extra_params["index_type"] = one of the values: FLAT, IVF_LAT, IVF_SQ8, NSGMIX, IVFSQ8H,
+//                                                        PQ, HNSW, HNSW_SQ8NM, ANNOY
+//        extra_params["metric_type"] = one of the values: L2, IP, HAMMING, JACCARD, TANIMOTO
+//                                                         SUBSTRUCTURE, SUPERSTRUCTURE
+//        extra_params["params"] = extra parameters for index, for example ivflat: {nlist: 2048}
+//    for structured field:
+//        extra_params["index_type"] = one of the values: SORTED
+type IndexParam struct {
+	CollectionName       string                   `protobuf:"bytes,2,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
+	FieldName            string                   `protobuf:"bytes,3,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
+	IndexName            string                   `protobuf:"bytes,4,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"`
+	ExtraParams          []*commonpb.KeyValuePair `protobuf:"bytes,5,rep,name=extra_params,json=extraParams,proto3" json:"extra_params,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *IndexParam) Reset()         { *m = IndexParam{} }
+func (m *IndexParam) String() string { return proto.CompactTextString(m) }
+func (*IndexParam) ProtoMessage()    {}
+func (*IndexParam) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b4b40b84dd2f74cb, []int{16}
+}
+
+func (m *IndexParam) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_IndexParam.Unmarshal(m, b)
+}
+func (m *IndexParam) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_IndexParam.Marshal(b, m, deterministic)
+}
+func (m *IndexParam) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_IndexParam.Merge(m, src)
+}
+func (m *IndexParam) XXX_Size() int {
+	return xxx_messageInfo_IndexParam.Size(m)
+}
+func (m *IndexParam) XXX_DiscardUnknown() {
+	xxx_messageInfo_IndexParam.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_IndexParam proto.InternalMessageInfo
+
+func (m *IndexParam) GetCollectionName() string {
+	if m != nil {
+		return m.CollectionName
+	}
+	return ""
+}
+
+func (m *IndexParam) GetFieldName() string {
+	if m != nil {
+		return m.FieldName
+	}
+	return ""
+}
+
+func (m *IndexParam) GetIndexName() string {
+	if m != nil {
+		return m.IndexName
+	}
+	return ""
+}
+
+func (m *IndexParam) GetExtraParams() []*commonpb.KeyValuePair {
+	if m != nil {
+		return m.ExtraParams
+	}
+	return nil
+}
+
+type DescribeIndexResponse struct {
+	Status               *commonpb.Status         `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"`
+	CollectionName       string                   `protobuf:"bytes,2,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
+	FieldName            string                   `protobuf:"bytes,3,opt,name=field_name,json=fieldName,proto3" json:"field_name,omitempty"`
+	IndexName            string                   `protobuf:"bytes,4,opt,name=index_name,json=indexName,proto3" json:"index_name,omitempty"`
+	ExtraParams          []*commonpb.KeyValuePair `protobuf:"bytes,5,rep,name=extra_params,json=extraParams,proto3" json:"extra_params,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                 `json:"-"`
+	XXX_unrecognized     []byte                   `json:"-"`
+	XXX_sizecache        int32                    `json:"-"`
+}
+
+func (m *DescribeIndexResponse) Reset()         { *m = DescribeIndexResponse{} }
+func (m *DescribeIndexResponse) String() string { return proto.CompactTextString(m) }
+func (*DescribeIndexResponse) ProtoMessage()    {}
+func (*DescribeIndexResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_b4b40b84dd2f74cb, []int{17}
+}
+
+func (m *DescribeIndexResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_DescribeIndexResponse.Unmarshal(m, b)
+}
+func (m *DescribeIndexResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_DescribeIndexResponse.Marshal(b, m, deterministic)
+}
+func (m *DescribeIndexResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_DescribeIndexResponse.Merge(m, src)
+}
+func (m *DescribeIndexResponse) XXX_Size() int {
+	return xxx_messageInfo_DescribeIndexResponse.Size(m)
+}
+func (m *DescribeIndexResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_DescribeIndexResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_DescribeIndexResponse proto.InternalMessageInfo
+
+func (m *DescribeIndexResponse) GetStatus() *commonpb.Status {
+	if m != nil {
+		return m.Status
+	}
+	return nil
+}
+
+func (m *DescribeIndexResponse) GetCollectionName() string {
+	if m != nil {
+		return m.CollectionName
+	}
+	return ""
+}
+
+func (m *DescribeIndexResponse) GetFieldName() string {
+	if m != nil {
+		return m.FieldName
+	}
+	return ""
+}
+
+func (m *DescribeIndexResponse) GetIndexName() string {
+	if m != nil {
+		return m.IndexName
+	}
+	return ""
+}
+
+func (m *DescribeIndexResponse) GetExtraParams() []*commonpb.KeyValuePair {
+	if m != nil {
+		return m.ExtraParams
+	}
+	return nil
+}
+
 func init() {
 	proto.RegisterEnum("milvus.proto.service.PlaceholderType", PlaceholderType_name, PlaceholderType_value)
 	proto.RegisterType((*CollectionName)(nil), "milvus.proto.service.CollectionName")
@@ -918,58 +1066,65 @@ func init() {
 	proto.RegisterType((*SysConfigResponse)(nil), "milvus.proto.service.SysConfigResponse")
 	proto.RegisterType((*Hits)(nil), "milvus.proto.service.Hits")
 	proto.RegisterType((*QueryResult)(nil), "milvus.proto.service.QueryResult")
+	proto.RegisterType((*IndexParam)(nil), "milvus.proto.service.IndexParam")
+	proto.RegisterType((*DescribeIndexResponse)(nil), "milvus.proto.service.DescribeIndexResponse")
 }
 
 func init() { proto.RegisterFile("service_msg.proto", fileDescriptor_b4b40b84dd2f74cb) }
 
 var fileDescriptor_b4b40b84dd2f74cb = []byte{
-	// 762 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xdd, 0x4e, 0xe3, 0x46,
-	0x14, 0xae, 0xe3, 0x90, 0x86, 0x13, 0x27, 0x24, 0xd3, 0x14, 0x19, 0xb8, 0x49, 0x8d, 0x68, 0xa3,
-	0x56, 0x4d, 0x24, 0xa8, 0x54, 0x71, 0x51, 0xa9, 0x49, 0xa0, 0x2d, 0x3f, 0x0a, 0x74, 0x12, 0x21,
-	0xd1, 0x4a, 0x8d, 0x26, 0xf6, 0xd4, 0x1e, 0xd5, 0xf1, 0x58, 0x9e, 0x31, 0x51, 0x78, 0x90, 0xbe,
-	0xc4, 0x3e, 0xc8, 0xde, 0xed, 0x33, 0xad, 0x3c, 0x36, 0xf9, 0x61, 0x59, 0x2d, 0x4b, 0xb8, 0x3b,
-	0xe7, 0xcc, 0x9c, 0xf3, 0x9d, 0xdf, 0x0f, 0x6a, 0x82, 0x46, 0x77, 0xcc, 0xa6, 0xa3, 0x89, 0x70,
-	0x5b, 0x61, 0xc4, 0x25, 0x47, 0xf5, 0x09, 0xf3, 0xef, 0x62, 0x91, 0x6a, 0xad, 0xec, 0x7d, 0xd7,
-	0xb0, 0xf9, 0x64, 0xc2, 0x83, 0xd4, 0xba, 0x6b, 0x08, 0xdb, 0xa3, 0x13, 0x92, 0x6a, 0xd6, 0x31,
-	0x54, 0x7a, 0xdc, 0xf7, 0xa9, 0x2d, 0x19, 0x0f, 0xfa, 0x64, 0x42, 0xd1, 0x77, 0xb0, 0x65, 0xcf,
-	0x2d, 0xa3, 0x80, 0x4c, 0xa8, 0xa9, 0x35, 0xb4, 0xe6, 0x26, 0xae, 0xd8, 0x2b, 0x1f, 0xad, 0x73,
-	0x28, 0x5f, 0x93, 0x48, 0xb2, 0xcf, 0xf6, 0x44, 0x55, 0xd0, 0x25, 0x71, 0xcd, 0x9c, 0x7a, 0x4c,
-	0x44, 0xeb, 0x8d, 0x06, 0x45, 0xcc, 0xa7, 0x5d, 0x22, 0x6d, 0xef, 0xf9, 0x71, 0xf6, 0xa1, 0x1c,
-	0x3e, 0x64, 0x30, 0x5a, 0x44, 0x34, 0xe6, 0xc6, 0x21, 0x71, 0xd1, 0x4f, 0x50, 0x8c, 0xf8, 0x74,
-	0xe4, 0x10, 0x49, 0x4c, 0xbd, 0xa1, 0x37, 0x4b, 0x87, 0x3b, 0xad, 0x95, 0x36, 0x65, 0xdd, 0xe9,
-	0xfa, 0x7c, 0x8c, 0xbf, 0x8c, 0xf8, 0xf4, 0x84, 0x48, 0x82, 0xf6, 0x60, 0xd3, 0x23, 0xc2, 0x1b,
-	0xfd, 0x47, 0x67, 0xc2, 0xcc, 0x37, 0xf4, 0x66, 0x19, 0x17, 0x13, 0xc3, 0x05, 0x9d, 0x09, 0x6b,
-	0x0a, 0xd5, 0x6b, 0x9f, 0xd8, 0xd4, 0xe3, 0xbe, 0x43, 0xa3, 0x1b, 0xe2, 0xc7, 0xf3, 0x9a, 0xb4,
-	0x79, 0x4d, 0xe8, 0x18, 0xf2, 0x72, 0x16, 0x52, 0x95, 0x54, 0xe5, 0xf0, 0xa0, 0xf5, 0xd4, 0x6c,
-	0x5a, 0x4b, 0x71, 0x86, 0xb3, 0x90, 0x62, 0xe5, 0x82, 0xb6, 0xa1, 0x70, 0x97, 0x44, 0x15, 0x2a,
-	0x63, 0x03, 0x67, 0x9a, 0xf5, 0xcf, 0x0a, 0xf0, 0xef, 0x11, 0x8f, 0x43, 0x74, 0x0e, 0x46, 0xb8,
-	0xb0, 0x09, 0x53, 0x53, 0x35, 0x7e, 0xfb, 0x49, 0x38, 0x95, 0x36, 0x5e, 0xf1, 0xb5, 0xfe, 0xd7,
-	0x60, 0xe3, 0xcf, 0x98, 0x46, 0xb3, 0xe7, 0xcf, 0xe0, 0x00, 0x2a, 0x2b, 0x33, 0x10, 0x66, 0xae,
-	0xa1, 0x37, 0x37, 0x71, 0x79, 0x79, 0x08, 0x22, 0x69, 0x8f, 0x23, 0x7c, 0x53, 0x4f, 0xdb, 0xe3,
-	0x08, 0x1f, 0xfd, 0x00, 0xb5, 0x25, 0xec, 0x91, 0x9b, 0x14, 0x63, 0xe6, 0x1b, 0x5a, 0xd3, 0xc0,
-	0xd5, 0xf0, 0x51, 0x91, 0xd6, 0xdf, 0x50, 0x19, 0xc8, 0x88, 0x05, 0x2e, 0xa6, 0x22, 0xe4, 0x81,
-	0xa0, 0xe8, 0x08, 0x0a, 0x42, 0x12, 0x19, 0x0b, 0x95, 0x57, 0xe9, 0x70, 0xef, 0xc9, 0xa1, 0x0e,
-	0xd4, 0x17, 0x9c, 0x7d, 0x45, 0x75, 0xd8, 0x50, 0x9d, 0xcc, 0x16, 0x25, 0x55, 0xac, 0x5b, 0x30,
-	0xba, 0x9c, 0xfb, 0xaf, 0x18, 0xba, 0xf8, 0x10, 0x9a, 0x00, 0x4a, 0xf3, 0xbe, 0x64, 0x42, 0xae,
-	0x07, 0xb0, 0xd8, 0x89, 0xb4, 0xc1, 0x0f, 0x3b, 0x31, 0x86, 0xaf, 0xce, 0x02, 0x49, 0x5d, 0x1a,
-	0xbd, 0x36, 0x86, 0x3e, 0xc7, 0x10, 0x50, 0xcf, 0x30, 0x30, 0x09, 0x5c, 0xba, 0x76, 0xa7, 0xc6,
-	0xd4, 0x65, 0x81, 0xea, 0x94, 0x8e, 0x53, 0x25, 0x59, 0x10, 0x1a, 0x38, 0x6a, 0x41, 0x74, 0x9c,
-	0x88, 0xd6, 0x3b, 0x0d, 0xbe, 0x5e, 0x70, 0xd3, 0x09, 0x15, 0x76, 0xc4, 0xc2, 0x44, 0x7c, 0x19,
-	0xec, 0x2f, 0x50, 0x48, 0x99, 0x4f, 0xe1, 0x96, 0x3e, 0x38, 0xc8, 0x94, 0x15, 0x17, 0x80, 0x03,
-	0x65, 0xc0, 0x99, 0x13, 0xea, 0x00, 0x24, 0x81, 0x98, 0x90, 0xcc, 0x16, 0x19, 0x91, 0x7c, 0xf3,
-	0x24, 0xee, 0x05, 0x9d, 0xa9, 0xdb, 0xba, 0x26, 0x2c, 0xc2, 0x4b, 0x4e, 0xd6, 0x5b, 0x0d, 0xea,
-	0x73, 0xc6, 0x5c, 0xbb, 0x9e, 0x9f, 0x21, 0xaf, 0xce, 0x32, 0xad, 0x66, 0xff, 0x23, 0xf7, 0xbe,
-	0x4c, 0xd0, 0x58, 0x39, 0xbc, 0x46, 0x25, 0x12, 0x6a, 0x83, 0x99, 0xe8, 0xf1, 0xe0, 0x5f, 0xb6,
-	0xe6, 0x45, 0x22, 0xc8, 0x2b, 0x8a, 0x4d, 0x77, 0x5a, 0xc9, 0x8f, 0xd8, 0x6f, 0xb1, 0xe9, 0x17,
-	0x90, 0xff, 0x83, 0x49, 0xc5, 0x25, 0x67, 0x27, 0x29, 0xd1, 0xe9, 0x38, 0x11, 0xd1, 0xce, 0x12,
-	0xc7, 0xe7, 0x14, 0x63, 0xce, 0x89, 0x7c, 0x3b, 0x19, 0x3b, 0x8f, 0xb2, 0x60, 0x39, 0x9c, 0x69,
-	0xd6, 0x0d, 0x94, 0x14, 0xd3, 0x61, 0x2a, 0x62, 0x5f, 0xbe, 0x38, 0x79, 0x8f, 0x49, 0x91, 0x41,
-	0x2a, 0xf9, 0xfb, 0x5f, 0x61, 0xeb, 0x11, 0xa7, 0xa3, 0x22, 0xe4, 0xfb, 0x57, 0xfd, 0xd3, 0xea,
-	0x17, 0xa8, 0x06, 0xe5, 0x9b, 0xd3, 0xde, 0xf0, 0x0a, 0x8f, 0xba, 0x67, 0xfd, 0x0e, 0xbe, 0xad,
-	0x3a, 0xa8, 0x0a, 0x46, 0x66, 0xfa, 0xed, 0xf2, 0xaa, 0x33, 0xac, 0xd2, 0x6e, 0xef, 0xaf, 0x8e,
-	0xcb, 0xa4, 0x17, 0x8f, 0x13, 0xd4, 0xf6, 0x3d, 0xf3, 0x7d, 0x76, 0x2f, 0xa9, 0xed, 0xb5, 0xd3,
-	0x8c, 0x7e, 0x74, 0x98, 0x90, 0x11, 0x1b, 0xc7, 0x92, 0x3a, 0x6d, 0x16, 0x48, 0x1a, 0x05, 0xc4,
-	0x6f, 0xab, 0x34, 0xdb, 0xd9, 0xd8, 0xc3, 0xf1, 0xb8, 0xa0, 0x0c, 0x47, 0xef, 0x03, 0x00, 0x00,
-	0xff, 0xff, 0x8d, 0x5a, 0x44, 0x98, 0x25, 0x08, 0x00, 0x00,
+	// 847 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x55, 0xdd, 0x6e, 0xdc, 0x44,
+	0x14, 0xc6, 0xeb, 0x4d, 0xd8, 0x9c, 0xf5, 0x6e, 0x37, 0x43, 0x5a, 0xb9, 0xad, 0x90, 0x16, 0x57,
+	0x85, 0x15, 0x88, 0x5d, 0x29, 0x45, 0x42, 0xbd, 0x40, 0x22, 0x9b, 0x14, 0x48, 0x53, 0x25, 0x61,
+	0x12, 0x45, 0x2a, 0x48, 0x58, 0x63, 0x7b, 0x6a, 0x8f, 0xb0, 0x3d, 0xd6, 0xcc, 0x38, 0xe9, 0xf6,
+	0x41, 0x78, 0x09, 0x9e, 0x80, 0x27, 0xe0, 0x8e, 0xf7, 0xe1, 0x0e, 0x79, 0xc6, 0xfb, 0x17, 0x16,
+	0x11, 0xb2, 0xb9, 0xe1, 0x6e, 0xce, 0x39, 0x3e, 0xe7, 0x3b, 0xbf, 0x9f, 0x61, 0x5b, 0x52, 0x71,
+	0xc9, 0x42, 0xea, 0x67, 0x32, 0x1e, 0x16, 0x82, 0x2b, 0x8e, 0x76, 0x32, 0x96, 0x5e, 0x96, 0xd2,
+	0x48, 0xc3, 0xda, 0xfe, 0xc8, 0x09, 0x79, 0x96, 0xf1, 0xdc, 0x68, 0x1f, 0x39, 0x32, 0x4c, 0x68,
+	0x46, 0x8c, 0xe4, 0x3d, 0x87, 0xee, 0x3e, 0x4f, 0x53, 0x1a, 0x2a, 0xc6, 0xf3, 0x63, 0x92, 0x51,
+	0xf4, 0x09, 0xdc, 0x0b, 0x67, 0x1a, 0x3f, 0x27, 0x19, 0x75, 0xad, 0xbe, 0x35, 0xd8, 0xc2, 0xdd,
+	0x70, 0xe9, 0x43, 0xef, 0x25, 0x74, 0x4e, 0x89, 0x50, 0xec, 0x3f, 0x7b, 0xa2, 0x1e, 0xd8, 0x8a,
+	0xc4, 0x6e, 0x43, 0x1b, 0xab, 0xa7, 0xf7, 0xab, 0x05, 0x2d, 0xcc, 0xaf, 0xc6, 0x44, 0x85, 0xc9,
+	0xcd, 0xe3, 0x3c, 0x81, 0x4e, 0x31, 0xcd, 0xc0, 0x9f, 0x47, 0x74, 0x66, 0xca, 0x73, 0x12, 0xa3,
+	0x2f, 0xa0, 0x25, 0xf8, 0x95, 0x1f, 0x11, 0x45, 0x5c, 0xbb, 0x6f, 0x0f, 0xda, 0xbb, 0x0f, 0x87,
+	0x4b, 0x6d, 0xaa, 0xbb, 0x33, 0x4e, 0x79, 0x80, 0xdf, 0x17, 0xfc, 0xea, 0x80, 0x28, 0x82, 0x1e,
+	0xc3, 0x56, 0x42, 0x64, 0xe2, 0xff, 0x4c, 0x27, 0xd2, 0x6d, 0xf6, 0xed, 0x41, 0x07, 0xb7, 0x2a,
+	0xc5, 0x11, 0x9d, 0x48, 0xef, 0x0a, 0x7a, 0xa7, 0x29, 0x09, 0x69, 0xc2, 0xd3, 0x88, 0x8a, 0x0b,
+	0x92, 0x96, 0xb3, 0x9a, 0xac, 0x59, 0x4d, 0xe8, 0x39, 0x34, 0xd5, 0xa4, 0xa0, 0x3a, 0xa9, 0xee,
+	0xee, 0xd3, 0xe1, 0xaa, 0xd9, 0x0c, 0x17, 0xe2, 0x9c, 0x4f, 0x0a, 0x8a, 0xb5, 0x0b, 0x7a, 0x00,
+	0x9b, 0x97, 0x55, 0x54, 0xa9, 0x33, 0x76, 0x70, 0x2d, 0x79, 0x3f, 0x2d, 0x01, 0x7f, 0x2b, 0x78,
+	0x59, 0xa0, 0x97, 0xe0, 0x14, 0x73, 0x9d, 0x74, 0x2d, 0x5d, 0xe3, 0xc7, 0xff, 0x0a, 0xa7, 0xd3,
+	0xc6, 0x4b, 0xbe, 0xde, 0x2f, 0x16, 0x6c, 0x7c, 0x5f, 0x52, 0x31, 0xb9, 0xf9, 0x0c, 0x9e, 0x42,
+	0x77, 0x69, 0x06, 0xd2, 0x6d, 0xf4, 0xed, 0xc1, 0x16, 0xee, 0x2c, 0x0e, 0x41, 0x56, 0xed, 0x89,
+	0x64, 0xea, 0xda, 0xa6, 0x3d, 0x91, 0x4c, 0xd1, 0x67, 0xb0, 0xbd, 0x80, 0xed, 0xc7, 0x55, 0x31,
+	0x6e, 0xb3, 0x6f, 0x0d, 0x1c, 0xdc, 0x2b, 0xae, 0x15, 0xe9, 0xfd, 0x08, 0xdd, 0x33, 0x25, 0x58,
+	0x1e, 0x63, 0x2a, 0x0b, 0x9e, 0x4b, 0x8a, 0x9e, 0xc1, 0xa6, 0x54, 0x44, 0x95, 0x52, 0xe7, 0xd5,
+	0xde, 0x7d, 0xbc, 0x72, 0xa8, 0x67, 0xfa, 0x13, 0x5c, 0x7f, 0x8a, 0x76, 0x60, 0x43, 0x77, 0xb2,
+	0x5e, 0x14, 0x23, 0x78, 0xaf, 0xc1, 0x19, 0x73, 0x9e, 0xde, 0x61, 0xe8, 0xd6, 0x34, 0x34, 0x01,
+	0x64, 0xf2, 0x7e, 0xc5, 0xa4, 0x5a, 0x0f, 0x60, 0xbe, 0x13, 0xa6, 0xc1, 0xd3, 0x9d, 0x08, 0xe0,
+	0x83, 0xc3, 0x5c, 0xd1, 0x98, 0x8a, 0xbb, 0xc6, 0xb0, 0x67, 0x18, 0x12, 0x76, 0x6a, 0x0c, 0x4c,
+	0xf2, 0x98, 0xae, 0xdd, 0xa9, 0x80, 0xc6, 0x2c, 0xd7, 0x9d, 0xb2, 0xb1, 0x11, 0xaa, 0x05, 0xa1,
+	0x79, 0xa4, 0x17, 0xc4, 0xc6, 0xd5, 0xd3, 0xfb, 0xc3, 0x82, 0xfb, 0x73, 0x6e, 0x3a, 0xa0, 0x32,
+	0x14, 0xac, 0xa8, 0x9e, 0xb7, 0x83, 0xfd, 0x0a, 0x36, 0x0d, 0xf3, 0x69, 0xdc, 0xf6, 0xdf, 0x0e,
+	0xd2, 0xb0, 0xe2, 0x1c, 0xf0, 0x4c, 0x2b, 0x70, 0xed, 0x84, 0xf6, 0x00, 0xaa, 0x40, 0x4c, 0x2a,
+	0x16, 0xca, 0x9a, 0x48, 0x3e, 0x5a, 0x89, 0x7b, 0x44, 0x27, 0xfa, 0xb6, 0x4e, 0x09, 0x13, 0x78,
+	0xc1, 0xc9, 0xfb, 0xdd, 0x82, 0x9d, 0x19, 0x63, 0xae, 0x5d, 0xcf, 0x97, 0xd0, 0xd4, 0x67, 0x69,
+	0xaa, 0x79, 0xf2, 0x0f, 0xf7, 0xbe, 0x48, 0xd0, 0x58, 0x3b, 0xdc, 0x45, 0x25, 0x0a, 0xb6, 0xcf,
+	0x26, 0x72, 0x9f, 0xe7, 0x6f, 0xd8, 0x9a, 0x17, 0x89, 0xa0, 0xa9, 0x29, 0xd6, 0xec, 0xb4, 0x7e,
+	0x5f, 0x63, 0xbf, 0xf9, 0xa6, 0x1f, 0x41, 0xf3, 0x3b, 0xa6, 0x34, 0x97, 0x1c, 0x1e, 0x18, 0xa2,
+	0xb3, 0x71, 0xf5, 0x44, 0x0f, 0x17, 0x38, 0xbe, 0xa1, 0x19, 0x73, 0x46, 0xe4, 0x0f, 0xaa, 0xb1,
+	0x73, 0x51, 0x07, 0x6b, 0xe0, 0x5a, 0xf2, 0x2e, 0xa0, 0xad, 0x99, 0x0e, 0x53, 0x59, 0xa6, 0xea,
+	0xd6, 0xc9, 0x27, 0x4c, 0xc9, 0x1a, 0x52, 0xbf, 0xbd, 0xdf, 0x2c, 0x80, 0xc3, 0x3c, 0xa2, 0x6f,
+	0x4f, 0x89, 0x20, 0xd9, 0x2a, 0x1e, 0x6d, 0xac, 0xe4, 0xd1, 0x0f, 0x01, 0xde, 0x30, 0x9a, 0x46,
+	0xe6, 0x1b, 0xc3, 0x93, 0x5b, 0x5a, 0x33, 0x35, 0xb3, 0x2a, 0xaa, 0x31, 0x37, 0x8d, 0x59, 0x6b,
+	0xb4, 0xf9, 0x00, 0x1c, 0xfa, 0x56, 0x09, 0xe2, 0x17, 0x15, 0xaa, 0x74, 0x37, 0x6e, 0x3a, 0xd5,
+	0xb6, 0x76, 0xd3, 0xb9, 0x4a, 0xef, 0x4f, 0x0b, 0xee, 0x9b, 0xbd, 0x0c, 0xa8, 0xae, 0x61, 0xbd,
+	0xd9, 0xfe, 0x9f, 0x6a, 0xff, 0xf4, 0x6b, 0xb8, 0x77, 0xed, 0x5f, 0x8c, 0x5a, 0xd0, 0x3c, 0x3e,
+	0x39, 0x7e, 0xd1, 0x7b, 0x0f, 0x6d, 0x43, 0xe7, 0xe2, 0xc5, 0xfe, 0xf9, 0x09, 0xf6, 0xc7, 0x87,
+	0xc7, 0x7b, 0xf8, 0x75, 0x2f, 0x42, 0x3d, 0x70, 0x6a, 0xd5, 0x37, 0xaf, 0x4e, 0xf6, 0xce, 0x7b,
+	0x74, 0xbc, 0xff, 0xc3, 0x5e, 0xcc, 0x54, 0x52, 0x06, 0x15, 0xd8, 0xe8, 0x1d, 0x4b, 0x53, 0xf6,
+	0x4e, 0xd1, 0x30, 0x19, 0x99, 0x44, 0x3e, 0x8f, 0x98, 0x54, 0x82, 0x05, 0xa5, 0xa2, 0xd1, 0x88,
+	0xe5, 0x8a, 0x8a, 0x9c, 0xa4, 0x23, 0x9d, 0xdd, 0xa8, 0x3e, 0xd7, 0x22, 0x08, 0x36, 0xb5, 0xe2,
+	0xd9, 0x5f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x26, 0x6f, 0x59, 0x0a, 0xdd, 0x09, 0x00, 0x00,
 }
diff --git a/internal/proxy/grpc_service.go b/internal/proxy/grpc_service.go
index e1f48ad5096dd736d97ebee1c85f85b8aef8e163..ec8d0813528c13f99f38020ed4db727895f9fcb4 100644
--- a/internal/proxy/grpc_service.go
+++ b/internal/proxy/grpc_service.go
@@ -593,3 +593,15 @@ func (p *Proxy) ShowPartitions(ctx context.Context, req *servicepb.CollectionNam
 	}
 	return spt.result, nil
 }
+
+func (p *Proxy) CreateIndex(ctx context.Context, indexParam *servicepb.IndexParam) (*commonpb.Status, error) {
+	return nil, nil
+}
+
+func (p *Proxy) DescribeIndex(context.Context, *servicepb.IndexParam) (*servicepb.DescribeIndexResponse, error) {
+	return nil, nil
+}
+
+func (p *Proxy) DescribeIndexProgress(context.Context, *servicepb.IndexParam) (*servicepb.BoolResponse, error) {
+	return nil, nil
+}
diff --git a/tests/python/test_search.py b/tests/python/test_search.py
index 947de240c3c649bdaa24a326829227670c29dc6a..7ecdcb54958fd2aa9bbba18ed73cbda6ba5cdb4d 100644
--- a/tests/python/test_search.py
+++ b/tests/python/test_search.py
@@ -705,8 +705,7 @@ class TestSearchBase:
         # TODO:
         # assert abs(res[0]._distances[0] - max_distance) <= tmp_epsilon
 
-    # DOG: TODO BINARY
-    @pytest.mark.skip("search_distance_jaccard_flat_index")
+    # PASS
     def test_search_distance_jaccard_flat_index(self, connect, binary_collection):
         '''
         target: search binary_collection, and check the result: distance
@@ -740,8 +739,7 @@ class TestSearchBase:
         with pytest.raises(Exception) as e:
             res = connect.search(binary_collection, query)
 
-    # DOG: TODO BINARY
-    @pytest.mark.skip("search_distance_hamming_flat_index")
+    # PASS
     @pytest.mark.level(2)
     def test_search_distance_hamming_flat_index(self, connect, binary_collection):
         '''
@@ -758,8 +756,7 @@ class TestSearchBase:
         res = connect.search(binary_collection, query)
         assert abs(res[0][0].distance - min(distance_0, distance_1).astype(float)) <= epsilon
 
-    # DOG: TODO BINARY
-    @pytest.mark.skip("search_distance_substructure_flat_index")
+    # PASS
     @pytest.mark.level(2)
     def test_search_distance_substructure_flat_index(self, connect, binary_collection):
         '''
@@ -777,8 +774,7 @@ class TestSearchBase:
         res = connect.search(binary_collection, query)
         assert len(res[0]) == 0
 
-    # DOG: TODO BINARY
-    @pytest.mark.skip("search_distance_substructure_flat_index_B")
+    # PASS
     @pytest.mark.level(2)
     def test_search_distance_substructure_flat_index_B(self, connect, binary_collection):
         '''
@@ -797,8 +793,7 @@ class TestSearchBase:
         assert res[1][0].distance <= epsilon
         assert res[1][0].id == ids[1]
 
-    # DOG: TODO BINARY
-    @pytest.mark.skip("search_distance_superstructure_flat_index")
+    # PASS
     @pytest.mark.level(2)
     def test_search_distance_superstructure_flat_index(self, connect, binary_collection):
         '''
@@ -816,8 +811,7 @@ class TestSearchBase:
         res = connect.search(binary_collection, query)
         assert len(res[0]) == 0
 
-    # DOG: TODO BINARY
-    @pytest.mark.skip("search_distance_superstructure_flat_index_B")
+    # PASS
     @pytest.mark.level(2)
     def test_search_distance_superstructure_flat_index_B(self, connect, binary_collection):
         '''
@@ -838,8 +832,7 @@ class TestSearchBase:
         assert res[1][0].id in ids
         assert res[1][0].distance <= epsilon
 
-    # DOG: TODO BINARY
-    @pytest.mark.skip("search_distance_tanimoto_flat_index")
+    # PASS
     @pytest.mark.level(2)
     def test_search_distance_tanimoto_flat_index(self, connect, binary_collection):
         '''
@@ -977,8 +970,7 @@ class TestSearchDSL(object):
     ******************************************************************
     """
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_no_must")
+    # PASS
     def test_query_no_must(self, connect, collection):
         '''
         method: build query without must expr
@@ -989,8 +981,7 @@ class TestSearchDSL(object):
         with pytest.raises(Exception) as e:
             res = connect.search(collection, query)
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_no_vector_term_only")
+    # PASS  
     def test_query_no_vector_term_only(self, connect, collection):
         '''
         method: build query without vector only term
@@ -1025,8 +1016,7 @@ class TestSearchDSL(object):
         assert len(res) == nq
         assert len(res[0]) == default_top_k
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_wrong_format")
+    # PASS
     def test_query_wrong_format(self, connect, collection):
         '''
         method: build query without must expr, with wrong expr name
@@ -1168,8 +1158,7 @@ class TestSearchDSL(object):
         assert len(res) == nq
         assert len(res[0]) == 0
 
-    # DOG: TODO TRC 
-    @pytest.mark.skip("query_complex_dsl")
+    # PASS
     def test_query_complex_dsl(self, connect, collection):
         '''
         method: query with complicated dsl
@@ -1191,9 +1180,7 @@ class TestSearchDSL(object):
     ******************************************************************
     """
 
-    # DOG: TODO INVALID DSL
-    # TODO
-    @pytest.mark.skip("query_term_key_error")
+    # PASS
     @pytest.mark.level(2)
     def test_query_term_key_error(self, connect, collection):
         '''
@@ -1213,8 +1200,7 @@ class TestSearchDSL(object):
     def get_invalid_term(self, request):
         return request.param
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_term_wrong_format")
+    # PASS
     @pytest.mark.level(2)
     def test_query_term_wrong_format(self, connect, collection, get_invalid_term):
         '''
@@ -1228,7 +1214,7 @@ class TestSearchDSL(object):
         with pytest.raises(Exception) as e:
             res = connect.search(collection, query)
 
-    # DOG: TODO UNKNOWN
+    # DOG: PLEASE IMPLEMENT connect.count_entities
     # TODO
     @pytest.mark.skip("query_term_field_named_term")
     @pytest.mark.level(2)
@@ -1244,8 +1230,8 @@ class TestSearchDSL(object):
         ids = connect.bulk_insert(collection_term, term_entities)
         assert len(ids) == default_nb
         connect.flush([collection_term])
-        count = connect.count_entities(collection_term)
-        assert count == default_nb
+        count = connect.count_entities(collection_term) # count_entities is not impelmented
+        assert count == default_nb                      # removing these two lines, this test passed
         term_param = {"term": {"term": {"values": [i for i in range(default_nb // 2)]}}}
         expr = {"must": [gen_default_vector_expr(default_query),
                          term_param]}
@@ -1255,8 +1241,7 @@ class TestSearchDSL(object):
         assert len(res[0]) == default_top_k
         connect.drop_collection(collection_term)
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_term_one_field_not_existed")
+    # PASS
     @pytest.mark.level(2)
     def test_query_term_one_field_not_existed(self, connect, collection):
         '''
@@ -1278,7 +1263,6 @@ class TestSearchDSL(object):
     """
 
     # PASS
-    # TODO
     def test_query_range_key_error(self, connect, collection):
         '''
         method: build query with range key error
@@ -1298,7 +1282,6 @@ class TestSearchDSL(object):
         return request.param
 
     # PASS
-    # TODO
     @pytest.mark.level(2)
     def test_query_range_wrong_format(self, connect, collection, get_invalid_range):
         '''
@@ -1366,8 +1349,7 @@ class TestSearchDSL(object):
         assert len(res) == nq
         assert len(res[0]) == default_top_k
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_range_one_field_not_existed")
+    # PASS
     def test_query_range_one_field_not_existed(self, connect, collection):
         '''
         method: build query with two fields ranges, one of fields not existed
@@ -1387,10 +1369,7 @@ class TestSearchDSL(object):
     ************************************************************************
     """
 
-    # DOG: TODO TRC
-    # TODO
-    @pytest.mark.skip("query_multi_term_has_common")
-    @pytest.mark.level(2)
+    # PASS
     def test_query_multi_term_has_common(self, connect, collection):
         '''
         method: build query with multi term with same field, and values has common
@@ -1405,9 +1384,7 @@ class TestSearchDSL(object):
         assert len(res) == nq
         assert len(res[0]) == default_top_k
 
-    # DOG: TODO TRC
-    # TODO
-    @pytest.mark.skip("query_multi_term_no_common")
+    # PASS
     @pytest.mark.level(2)
     def test_query_multi_term_no_common(self, connect, collection):
         '''
@@ -1423,9 +1400,7 @@ class TestSearchDSL(object):
         assert len(res) == nq
         assert len(res[0]) == 0
 
-    # DOG: TODO TRC
-    # TODO
-    @pytest.mark.skip("query_multi_term_different_fields")
+    # PASS
     def test_query_multi_term_different_fields(self, connect, collection):
         '''
          method: build query with multi range with same field, and ranges no common
@@ -1441,9 +1416,7 @@ class TestSearchDSL(object):
         assert len(res) == nq
         assert len(res[0]) == 0
 
-    # DOG: TODO TRC
-    # TODO
-    @pytest.mark.skip("query_single_term_multi_fields")
+    # PASS
     @pytest.mark.level(2)
     def test_query_single_term_multi_fields(self, connect, collection):
         '''
@@ -1459,9 +1432,7 @@ class TestSearchDSL(object):
         with pytest.raises(Exception) as e:
             res = connect.search(collection, query)
 
-    # DOG: TODO TRC
-    # TODO
-    @pytest.mark.skip("query_multi_range_has_common")
+    # PASS
     @pytest.mark.level(2)
     def test_query_multi_range_has_common(self, connect, collection):
         '''
@@ -1477,9 +1448,7 @@ class TestSearchDSL(object):
         assert len(res) == nq
         assert len(res[0]) == default_top_k
 
-    # DOG: TODO TRC
-    # TODO
-    @pytest.mark.skip("query_multi_range_no_common")
+    # PASS
     @pytest.mark.level(2)
     def test_query_multi_range_no_common(self, connect, collection):
         '''
@@ -1495,9 +1464,7 @@ class TestSearchDSL(object):
         assert len(res) == nq
         assert len(res[0]) == 0
 
-    # DOG: TODO TRC
-    # TODO
-    @pytest.mark.skip("query_multi_range_different_fields")
+    # PASS
     @pytest.mark.level(2)
     def test_query_multi_range_different_fields(self, connect, collection):
         '''
@@ -1513,9 +1480,7 @@ class TestSearchDSL(object):
         assert len(res) == nq
         assert len(res[0]) == 0
 
-    # DOG: TODO TRC
-    # TODO
-    @pytest.mark.skip("query_single_range_multi_fields")
+    # PASS
     @pytest.mark.level(2)
     def test_query_single_range_multi_fields(self, connect, collection):
         '''
@@ -1537,9 +1502,7 @@ class TestSearchDSL(object):
     ******************************************************************
     """
 
-    # DOG: TODO TRC
-    # TODO
-    @pytest.mark.skip("query_single_term_range_has_common")
+    # PASS
     @pytest.mark.level(2)
     def test_query_single_term_range_has_common(self, connect, collection):
         '''
@@ -1555,9 +1518,7 @@ class TestSearchDSL(object):
         assert len(res) == nq
         assert len(res[0]) == default_top_k
 
-    # DOG: TODO TRC
-    # TODO
-    @pytest.mark.skip("query_single_term_range_no_common")
+    # PASS
     def test_query_single_term_range_no_common(self, connect, collection):
         '''
         method: build query with single term single range
@@ -1579,7 +1540,6 @@ class TestSearchDSL(object):
     """
 
     # PASS
-    # TODO
     def test_query_multi_vectors_same_field(self, connect, collection):
         '''
         method: build query with two vectors same field
@@ -1616,8 +1576,7 @@ class TestSearchDSLBools(object):
         with pytest.raises(Exception) as e:
             res = connect.search(collection, query)
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_should_only_term")
+    # PASS
     def test_query_should_only_term(self, connect, collection):
         '''
         method: build query without must, with should.term instead
@@ -1628,8 +1587,7 @@ class TestSearchDSLBools(object):
         with pytest.raises(Exception) as e:
             res = connect.search(collection, query)
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_should_only_vector")
+    # PASS
     def test_query_should_only_vector(self, connect, collection):
         '''
         method: build query without must, with should.vector instead
@@ -1640,8 +1598,7 @@ class TestSearchDSLBools(object):
         with pytest.raises(Exception) as e:
             res = connect.search(collection, query)
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_must_not_only_term")
+    # PASS
     def test_query_must_not_only_term(self, connect, collection):
         '''
         method: build query without must, with must_not.term instead
@@ -1652,8 +1609,7 @@ class TestSearchDSLBools(object):
         with pytest.raises(Exception) as e:
             res = connect.search(collection, query)
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_must_not_vector")
+    # PASS
     def test_query_must_not_vector(self, connect, collection):
         '''
         method: build query without must, with must_not.vector instead
@@ -1664,8 +1620,7 @@ class TestSearchDSLBools(object):
         with pytest.raises(Exception) as e:
             res = connect.search(collection, query)
 
-    # DOG: TODO INVALID DSL
-    @pytest.mark.skip("query_must_should")
+    # PASS
     def test_query_must_should(self, connect, collection):
         '''
         method: build query must, and with should.term