Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions qdrant_client/local/local_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,12 @@ def search(

required_order = distance_to_order(distance)

if required_order == DistanceOrder.BIGGER_IS_BETTER or isinstance(
# Recommend (best_score/sum_scores), Discover, and Context queries always
# compute a sigmoid-based synthetic score where bigger is always better,
# regardless of the collection's underlying distance metric. This override
# must be applied consistently everywhere required_order is used for these
# query types - both for sort direction and for score_threshold comparison.
bigger_is_better = required_order == DistanceOrder.BIGGER_IS_BETTER or isinstance(
query_vector,
(
DiscoveryQuery,
Expand All @@ -707,7 +712,9 @@ def search(
MultiContextQuery,
MultiRecoQuery,
), # sparse structures are not required, sparse always uses DOT
):
)

if bigger_is_better:
order = np.argsort(scores)[::-1]
else:
order = np.argsort(scores)
Expand All @@ -727,7 +734,7 @@ def search(
point_id = self.ids_inv[idx]

if score_threshold is not None:
if required_order == DistanceOrder.BIGGER_IS_BETTER:
if bigger_is_better:
if score < score_threshold:
break
else:
Expand Down