diff --git a/pymilvus/client/prepare.py b/pymilvus/client/prepare.py index 5ffafe1ef..118af3bf1 100644 --- a/pymilvus/client/prepare.py +++ b/pymilvus/client/prepare.py @@ -680,6 +680,20 @@ def search_requests_with_expr( if not isinstance(params, dict): raise ParamError(message=f"Search params must be a dict, got {type(params)}") + if PAGE_RETAIN_ORDER_FIELD in kwargs and PAGE_RETAIN_ORDER_FIELD in param: + raise ParamError( + message="Provide page_retain_order both in kwargs and param, expect just one" + ) + page_retain_order = kwargs.get(PAGE_RETAIN_ORDER_FIELD) or param.get( + PAGE_RETAIN_ORDER_FIELD + ) + if page_retain_order is not None: + if not isinstance(page_retain_order, bool): + raise ParamError( + message=f"wrong type for page_retain_order, expect bool, got {type(page_retain_order)}" + ) + params[PAGE_RETAIN_ORDER_FIELD] = page_retain_order + search_params = { "topk": limit, "params": params, @@ -697,20 +711,6 @@ def search_requests_with_expr( raise ParamError(message=f"wrong type for offset, expect int, got {type(offset)}") search_params["offset"] = offset - if PAGE_RETAIN_ORDER_FIELD in kwargs and PAGE_RETAIN_ORDER_FIELD in param: - raise ParamError( - message="Provide page_retain_order both in kwargs and param, expect just one" - ) - page_retain_order = kwargs.get(PAGE_RETAIN_ORDER_FIELD) or param.get( - PAGE_RETAIN_ORDER_FIELD - ) - if page_retain_order is not None: - if not isinstance(page_retain_order, bool): - raise ParamError( - message=f"wrong type for page_retain_order, expect bool, got {type(page_retain_order)}" - ) - search_params[PAGE_RETAIN_ORDER_FIELD] = page_retain_order - is_iterator = kwargs.get(ITERATOR_FIELD) if is_iterator is not None: search_params[ITERATOR_FIELD] = is_iterator diff --git a/pymilvus/orm/collection.py b/pymilvus/orm/collection.py index 131563e6d..d36c9af54 100644 --- a/pymilvus/orm/collection.py +++ b/pymilvus/orm/collection.py @@ -681,8 +681,6 @@ def search( similar metricy types, the value must be of type str. * *offset* (``int``, optional) offset for pagination. - * *page_retain_order* (``bool``, optional) - Whether to retain the order of the search result when offset is provided. * *params of index: *nprobe*, *ef*, *search_k*, etc Corresponding search params for a certain index. example for param:: @@ -690,7 +688,6 @@ def search( { "metric_type": "L2", "offset": 10, - "page_retain_order": True, "params": {"nprobe": 12}, } @@ -723,9 +720,6 @@ def search( * *offset* (``int``, optinal) offset for pagination. - * *page_retain_order* (``bool``, optional) - Whether to retain the order of the search result when offset is provided. - * *consistency_level* (``str/int``, optional) Which consistency level to use when searching in the collection. diff --git a/pymilvus/orm/partition.py b/pymilvus/orm/partition.py index fca4cbd68..e860f4cad 100644 --- a/pymilvus/orm/partition.py +++ b/pymilvus/orm/partition.py @@ -387,9 +387,6 @@ def search( * *offset* (``int``, optional) offset for pagination. - * *page_retain_order* (``bool``, optional) - Whether to retain the order of the search result when offset is provided. - * *limit* (``int``, optional) limit for the search results and pagination. @@ -399,7 +396,6 @@ def search( "nprobe": 128, "metric_type": "L2", "offset": 10, - "page_retain_order": True, "limit": 10, } diff --git a/tests/test_prepare.py b/tests/test_prepare.py index d292409fb..a2f557d3a 100644 --- a/tests/test_prepare.py +++ b/tests/test_prepare.py @@ -1,5 +1,7 @@ import pytest +import json +from pymilvus.client.constants import PAGE_RETAIN_ORDER_FIELD from pymilvus.client.prepare import Prepare from pymilvus import DataType, MilvusException, CollectionSchema, FieldSchema from pymilvus import DefaultConfig @@ -24,20 +26,23 @@ def test_search_requests_with_expr_offset(self): search_params = { "metric_type": "L2", "offset": 10, - "page_retain_order": True, + "params": {"page_retain_order": True} } ret = Prepare.search_requests_with_expr("name", data, "v", search_params, 100) offset_exists = False page_retain_order_exists = False + print(ret.search_params) for p in ret.search_params: if p.key == "offset": offset_exists = True assert p.value == "10" - elif p.key == "page_retain_order": - page_retain_order_exists = True - assert p.value == "True" # it was dumped as string + elif p.key == "params": + params = json.loads(p.value) + if PAGE_RETAIN_ORDER_FIELD in params: + page_retain_order_exists = True + assert params[PAGE_RETAIN_ORDER_FIELD] == True assert offset_exists is True assert page_retain_order_exists is True