Skip to content

Commit 5a685eb

Browse files
fix conflict for ef and batch size (#1716)
Signed-off-by: MrPresent-Han <[email protected]>
1 parent 4347ebb commit 5a685eb

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

pymilvus/orm/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
RANGE_FILTER = "range_filter"
3737
FIELDS = "fields"
3838
ITERATION_EXTENSION_REDUCE_RATE = "iteration_extension_reduce_rate"
39+
EF = "ef"
3940
DEFAULT_MAX_L2_DISTANCE = 99999999.0
4041
DEFAULT_MIN_IP_DISTANCE = -99999999.0
4142
DEFAULT_MAX_HAMMING_DISTANCE = 99999999.0

pymilvus/orm/iterator.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
CALC_DIST_L2,
1919
CALC_DIST_TANIMOTO,
2020
DEFAULT_SEARCH_EXTENSION_RATE,
21+
EF,
2122
FIELDS,
2223
INT64_MAX,
2324
ITERATION_EXTENSION_REDUCE_RATE,
@@ -39,7 +40,11 @@
3940
SearchIterator = TypeVar("SearchIterator")
4041

4142

42-
def extend_batch_size(batch_size: int) -> int:
43+
def extend_batch_size(batch_size: int, next_param: dict) -> int:
44+
if EF in next_param[PARAMS]:
45+
return min(
46+
MAX_BATCH_SIZE, batch_size * DEFAULT_SEARCH_EXTENSION_RATE, next_param[PARAMS][EF]
47+
)
4348
return min(MAX_BATCH_SIZE, batch_size * DEFAULT_SEARCH_EXTENSION_RATE)
4449

4550

@@ -294,6 +299,7 @@ def __init__(
294299
}
295300
self._expr = expr
296301
self.__check_set_params(param)
302+
self.__check_for_special_index_param()
297303
self._kwargs = kwargs
298304
self._filtered_ids = []
299305
self._filtered_distance = None
@@ -337,6 +343,15 @@ def __check_set_params(self, param: Dict):
337343
if PARAMS not in self._param:
338344
self._param[PARAMS] = {}
339345

346+
def __check_for_special_index_param(self):
347+
if (
348+
EF in self._param[PARAMS]
349+
and self._param[PARAMS][EF] < self._iterator_params[BATCH_SIZE]
350+
):
351+
raise MilvusException(
352+
message="When using hnsw index, provided ef must be larger than or equal to batch size"
353+
)
354+
340355
def __setup__pk_prop(self):
341356
fields = self._schema[FIELDS]
342357
for field in fields:
@@ -472,7 +487,7 @@ def __execute_next_search(self, next_params: dict, next_expr: str) -> SearchPage
472487
self._iterator_params["data"],
473488
self._iterator_params["ann_field"],
474489
next_params,
475-
extend_batch_size(self._iterator_params[BATCH_SIZE]),
490+
extend_batch_size(self._iterator_params[BATCH_SIZE], next_params),
476491
next_expr,
477492
self._iterator_params["partition_names"],
478493
self._iterator_params["output_fields"],

0 commit comments

Comments
 (0)