Skip to content

Commit 1f5255a

Browse files
authored
enhance: alterindex & altercollection supports altering properties (#2406)
enhance : alterindex delete properties We have introduced a new parameter deleteKeys to the alterindex functionality, which allows for the deletion of properties within an index. This enhancement provides users with the flexibility to manage index properties more effectively by removing specific keys as needed. altercollection delete properties We have introduced a new parameter deleteKeys to the altercollection functionality, which allows for the deletion of properties within an collection. This enhancement provides users with the flexibility to manage collection properties more effectively by removing specific keys as needed. 3.support altercollectionfield We currently support modifying the fieldparams of a field in a collection using altercollectionfield, which only allows changes to the max-length attribute. Key Points: New Parameter - deleteKeys: This new parameter enables the deletion of specified properties from an index. By passing a list of keys to deleteKeys, users can remove the corresponding properties from the index. Mutual Exclusivity: The deleteKeys parameter cannot be used in conjunction with the extraParams parameter. Users must choose one parameter to pass based on their requirement. If deleteKeys is provided, it indicates an intent to delete properties; if extraParams is provided, it signifies the addition or update of properties. issue :[#2338](#2338) --------- Signed-off-by: Xianhui.Lin <[email protected]>
1 parent 6feeaf3 commit 1f5255a

File tree

9 files changed

+560
-410
lines changed

9 files changed

+560
-410
lines changed

pymilvus/client/grpc_handler.py

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -320,11 +320,42 @@ def drop_collection(self, collection_name: str, timeout: Optional[float] = None)
320320
check_status(status)
321321

322322
@retry_on_rpc_failure()
323-
def alter_collection(
323+
def alter_collection_properties(
324324
self, collection_name: str, properties: List, timeout: Optional[float] = None, **kwargs
325325
):
326326
check_pass_param(collection_name=collection_name, properties=properties, timeout=timeout)
327-
request = Prepare.alter_collection_request(collection_name, properties)
327+
request = Prepare.alter_collection_request(collection_name, properties=properties)
328+
rf = self._stub.AlterCollection.future(request, timeout=timeout)
329+
status = rf.result()
330+
check_status(status)
331+
332+
@retry_on_rpc_failure()
333+
def alter_collection_field_properties(
334+
self,
335+
collection_name: str,
336+
field_name: str,
337+
field_param: List,
338+
timeout: Optional[float] = None,
339+
**kwargs,
340+
):
341+
check_pass_param(collection_name=collection_name, properties=field_param, timeout=timeout)
342+
request = Prepare.alter_collection_field_request(
343+
self, collection_name=collection_name, field_name=field_name, field_param=field_param
344+
)
345+
rf = self._stub.AlterCollectionField.future(request, timeout=timeout)
346+
status = rf.result()
347+
check_status(status)
348+
349+
@retry_on_rpc_failure()
350+
def drop_collection_properties(
351+
self,
352+
collection_name: str,
353+
property_keys: List[str],
354+
timeout: Optional[float] = None,
355+
**kwargs,
356+
):
357+
check_pass_param(collection_name=collection_name, timeout=timeout)
358+
request = Prepare.alter_collection_request(collection_name, delete_keys=property_keys)
328359
rf = self._stub.AlterCollection.future(request, timeout=timeout)
329360
status = rf.result()
330361
check_status(status)
@@ -1003,24 +1034,41 @@ def _check():
10031034
return Status(status.code, status.reason)
10041035

10051036
@retry_on_rpc_failure()
1006-
def alter_index(
1037+
def alter_index_properties(
10071038
self,
10081039
collection_name: str,
10091040
index_name: str,
1010-
extra_params: dict,
1041+
properties: dict,
10111042
timeout: Optional[float] = None,
10121043
**kwargs,
10131044
):
10141045
check_pass_param(collection_name=collection_name, index_name=index_name, timeout=timeout)
1015-
if extra_params is None:
1016-
raise ParamError(message="extra_params should not be None")
1046+
if properties is None:
1047+
raise ParamError(message="properties should not be None")
10171048

1018-
request = Prepare.alter_index_request(collection_name, index_name, extra_params)
1049+
request = Prepare.alter_index_properties_request(collection_name, index_name, properties)
10191050

10201051
rf = self._stub.AlterIndex.future(request, timeout=timeout)
10211052
response = rf.result()
10221053
check_status(response)
10231054

1055+
@retry_on_rpc_failure()
1056+
def drop_index_properties(
1057+
self,
1058+
collection_name: str,
1059+
index_name: str,
1060+
property_keys: List[str],
1061+
timeout: Optional[float] = None,
1062+
**kwargs,
1063+
):
1064+
check_pass_param(collection_name=collection_name, index_name=index_name, timeout=timeout)
1065+
request = Prepare.drop_index_properties_request(
1066+
collection_name, index_name, delete_keys=property_keys
1067+
)
1068+
rf = self._stub.AlterIndex.future(request, timeout=timeout)
1069+
response = rf.result()
1070+
check_status(response)
1071+
10241072
@retry_on_rpc_failure()
10251073
def list_indexes(self, collection_name: str, timeout: Optional[float] = None, **kwargs):
10261074
check_pass_param(collection_name=collection_name, timeout=timeout)

pymilvus/client/prepare.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -277,11 +277,27 @@ def describe_collection_request(
277277
def alter_collection_request(
278278
cls,
279279
collection_name: str,
280-
properties: Dict,
280+
properties: Optional[Dict] = None,
281+
delete_keys: Optional[List[str]] = None,
281282
) -> milvus_types.AlterCollectionRequest:
282-
kvs = [common_types.KeyValuePair(key=k, value=str(v)) for k, v in properties.items()]
283+
kvs = []
284+
if properties:
285+
kvs = [common_types.KeyValuePair(key=k, value=str(v)) for k, v in properties.items()]
286+
287+
return milvus_types.AlterCollectionRequest(
288+
collection_name=collection_name, properties=kvs, delete_keys=delete_keys
289+
)
283290

284-
return milvus_types.AlterCollectionRequest(collection_name=collection_name, properties=kvs)
291+
@classmethod
292+
def alter_collection_field_request(
293+
cls, collection_name: str, field_name: str, field_param: Dict
294+
) -> milvus_types.AlterCollectionFieldRequest:
295+
kvs = []
296+
if field_param:
297+
kvs = [common_types.KeyValuePair(key=k, value=str(v)) for k, v in field_param.items()]
298+
return milvus_types.AlterCollectionFieldRequest(
299+
collection_name=collection_name, field_name=field_name, properties=kvs
300+
)
285301

286302
@classmethod
287303
def collection_stats_request(cls, collection_name: str):
@@ -1094,14 +1110,24 @@ def create_index_request(cls, collection_name: str, field_name: str, params: Dic
10941110
return index_params
10951111

10961112
@classmethod
1097-
def alter_index_request(cls, collection_name: str, index_name: str, extra_params: dict):
1113+
def alter_index_properties_request(
1114+
cls, collection_name: str, index_name: str, properties: dict
1115+
):
10981116
params = []
1099-
for k, v in extra_params.items():
1117+
for k, v in properties.items():
11001118
params.append(common_types.KeyValuePair(key=str(k), value=utils.dumps(v)))
11011119
return milvus_types.AlterIndexRequest(
11021120
collection_name=collection_name, index_name=index_name, extra_params=params
11031121
)
11041122

1123+
@classmethod
1124+
def drop_index_properties_request(
1125+
cls, collection_name: str, index_name: str, delete_keys: List[str]
1126+
):
1127+
return milvus_types.AlterIndexRequest(
1128+
collection_name=collection_name, index_name=index_name, delete_keys=delete_keys
1129+
)
1130+
11051131
@classmethod
11061132
def describe_index_request(
11071133
cls, collection_name: str, index_name: str, timestamp: Optional[int] = None

0 commit comments

Comments
 (0)