From 6291c0401676205f0678b4f9afc19d0e795d9971 Mon Sep 17 00:00:00 2001 From: Vladislav Date: Mon, 17 Jun 2024 23:39:38 +0300 Subject: [PATCH] chore(search): Add __vector_score alias (#3186) --- src/core/search/search.cc | 2 +- src/server/search/search_family_test.cc | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/core/search/search.cc b/src/core/search/search.cc index 525a06dce..ca01c3916 100644 --- a/src/core/search/search.cc +++ b/src/core/search/search.cc @@ -319,7 +319,7 @@ struct BasicSearch { // Skip sorting again for KNN queries, reverse if needed will be applied on aggregation if (auto knn = get_if(&node.filter->Variant()); - knn && knn->score_alias == node.field) { + knn && (knn->score_alias == node.field || "__vector_score" == node.field)) { return sub_results; } diff --git a/src/server/search/search_family_test.cc b/src/server/search/search_family_test.cc index da12a1aa1..7d86bf84f 100644 --- a/src/server/search/search_family_test.cc +++ b/src/server/search/search_family_test.cc @@ -455,8 +455,14 @@ TEST_F(SearchFamilyTest, TestReturn) { resp = Run({"ft.search", "i1", "@justA:0", "return", "1", "nothere"}); EXPECT_THAT(resp, MatchEntry("k0", "nothere", "")); + // Checl implcit __vector_score is provided + float score = 20; + resp = Run({"ft.search", "i1", "@justA:0 => [KNN 20 @vector $vector]", "SORTBY", "__vector_score", + "DESC", "RETURN", "1", "longA", "PARAMS", "2", "vector", floatsv(&score)}); + EXPECT_THAT(resp, MatchEntry("k0", "longA", "0")); + // Check sort doesn't shadow knn return alias - const float score = 20; + score = 20; resp = Run({"ft.search", "i1", "@justA:0 => [KNN 20 @vector $vector AS vec_return]", "SORTBY", "vec_return", "DESC", "RETURN", "1", "vec_return", "PARAMS", "2", "vector", floatsv(&score)});