From a4c8d970896b700a034d80b3f4a2a2cb5b1c4661 Mon Sep 17 00:00:00 2001 From: Viktor Govako Date: Tue, 9 Apr 2024 08:54:20 -0300 Subject: [PATCH] [search][ranking] Removed "small plus diff" in name match over category match. Signed-off-by: Viktor Govako --- search/ranking_info.cpp | 5 +-- .../search_quality_tests/real_mwm_tests.cpp | 41 ++++++++++++++++--- 2 files changed, 37 insertions(+), 9 deletions(-) diff --git a/search/ranking_info.cpp b/search/ranking_info.cpp index 6bebb12158..2b875a9742 100644 --- a/search/ranking_info.cpp +++ b/search/ranking_info.cpp @@ -96,8 +96,7 @@ static_assert(std::size(kPoiType) == base::E2I(PoiType::Count)); // - See NY_Subway test. double constexpr kFalseCats = kNameScore[base::E2I(NameScore::FULL_PREFIX)] - kNameScore[base::E2I(NameScore::FULL_MATCH)] + - kPoiType[base::E2I(PoiType::PureCategory)] - kPoiType[base::E2I(PoiType::Eat)] - + AbsPenaltyPerKm(); // a small 'plus diff' to keep fast food a little bit higher + kPoiType[base::E2I(PoiType::PureCategory)] - kPoiType[base::E2I(PoiType::Eat)]; static_assert(kFalseCats < 0.0); double constexpr kStreetType[] = { @@ -472,7 +471,7 @@ Model::Type RankingInfo::GetTypeScore() const PoiType RankingInfo::GetPoiTypeScore() const { - // Equalize all *pure category* results to not distinguish different toilets (see NY_Subway, ToiletAirport test). + // Equalize all *pure category* results to not distinguish different toilets (see ToiletAirport test). return (m_pureCats ? PoiType::PureCategory : m_classifType.poi); } diff --git a/search/search_quality/search_quality_tests/real_mwm_tests.cpp b/search/search_quality/search_quality_tests/real_mwm_tests.cpp index 8dc73d66ee..841efc52cd 100644 --- a/search/search_quality/search_quality_tests/real_mwm_tests.cpp +++ b/search/search_quality/search_quality_tests/real_mwm_tests.cpp @@ -224,19 +224,48 @@ UNIT_CLASS_TEST(MwmTestsFixture, TopPOIs_Smoke) // https://github.com/organicmaps/organicmaps/issues/2133 UNIT_CLASS_TEST(MwmTestsFixture, NY_Subway) { + auto const & cl = classif(); + size_t constexpr kTopResults = kPopularPoiResultsCount; + // New York ms::LatLon const center(40.7355019, -73.9948155); SetViewportAndLoadMaps(center); - auto request = MakeRequest("subway"); + { + auto request = MakeRequest("subway"); + auto const & results = request->Results(); + TEST_GREATER(results.size(), kTopResults, ()); + + /// @todo Equal food and metro results, so test 2 food on top. + Range const top10(results, 0, kTopResults); + TEST_EQUAL(CountClassifType(top10, cl.GetTypeByPath({"amenity", "fast_food"})), 2, ()); + TEST_GREATER(CountClassifType(top10, cl.GetTypeByPath({"railway", "station", "subway"})), 6, ()); + } + { + auto request = MakeRequest("subway food"); + auto const & results = request->Results(); + TEST_GREATER(results.size(), kTopResults, ()); + + EqualClassifType(Range(results, 0, kTopResults), GetClassifTypes({{"amenity", "fast_food"}})); + } +} + +UNIT_CLASS_TEST(MwmTestsFixture, Paris_Hotel) +{ + auto const & cl = classif(); + + // Paris + ms::LatLon const center(48.8568049, 2.3515878); + SetViewportAndLoadMaps(center); + + auto request = MakeRequest("hotel"); auto const & results = request->Results(); TEST_GREATER(results.size(), kPopularPoiResultsCount, ()); - /// @todo First result is building-train_station with 'subway' in name; - // - 5 nearby 'subway' fast-foods; - // - 3 railway-station-subway; - EqualClassifType(Range(results, 1, 6), GetClassifTypes({{"amenity", "fast_food"}})); - EqualClassifType(Range(results, 6, 9), GetClassifTypes({{"railway", "station", "subway"}})); + /// @todo Ok to have post office, car repair, library on top with "hotel" name? + // Test at least some nearby hotels (3). + Range const top10(results, 0, kPopularPoiResultsCount); + TEST_GREATER(CountClassifType(top10, cl.GetTypeByPath({"tourism", "hotel"})), 2, ()); } // https://github.com/organicmaps/organicmaps/issues/3249