From f12777b845510baeb611e4e2f69582ab22a759a3 Mon Sep 17 00:00:00 2001 From: MrPresent-Han <116052805+MrPresent-Han@users.noreply.github.com> Date: Thu, 7 Dec 2023 17:44:26 +0800 Subject: [PATCH] support search group-by(#1809) (#1810) Signed-off-by: MrPresent-Han --- pymilvus/client/constants.py | 1 + pymilvus/client/prepare.py | 5 ++++- pymilvus/orm/iterator.py | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pymilvus/client/constants.py b/pymilvus/client/constants.py index b9c659dcc..0ea698017 100644 --- a/pymilvus/client/constants.py +++ b/pymilvus/client/constants.py @@ -9,3 +9,4 @@ DEFAULT_CONSISTENCY_LEVEL = ConsistencyLevel.Bounded DEFAULT_RESOURCE_GROUP = "__default_resource_group" REDUCE_STOP_FOR_BEST = "reduce_stop_for_best" +GROUP_BY_FIELD = "group_by_field" diff --git a/pymilvus/client/prepare.py b/pymilvus/client/prepare.py index a0683822d..4b362f663 100644 --- a/pymilvus/client/prepare.py +++ b/pymilvus/client/prepare.py @@ -13,7 +13,7 @@ from . import blob, entity_helper, ts_utils from .check import check_pass_param, is_legal_collection_properties -from .constants import DEFAULT_CONSISTENCY_LEVEL, REDUCE_STOP_FOR_BEST +from .constants import DEFAULT_CONSISTENCY_LEVEL, GROUP_BY_FIELD, REDUCE_STOP_FOR_BEST from .types import DataType, PlaceholderType, get_consistency_level from .utils import traverse_info, traverse_rows_info @@ -612,6 +612,9 @@ def search_requests_with_expr( if param.get("metric_type", None) is not None: search_params["metric_type"] = param["metric_type"] + if param.get(GROUP_BY_FIELD, None) is not None: + search_params[GROUP_BY_FIELD] = param[GROUP_BY_FIELD] + if anns_field: search_params["anns_field"] = anns_field diff --git a/pymilvus/orm/iterator.py b/pymilvus/orm/iterator.py index 324e30c01..9ac5839fa 100644 --- a/pymilvus/orm/iterator.py +++ b/pymilvus/orm/iterator.py @@ -168,7 +168,7 @@ def __check_reached_limit(self, ret: List): def __setup__pk_prop(self): fields = self._schema[FIELDS] for field in fields: - if field[IS_PRIMARY]: + if IS_PRIMARY in field and field[IS_PRIMARY]: if field["type"] == DataType.VARCHAR: self._pk_str = True else: