diff --git a/search/pre_ranker.cpp b/search/pre_ranker.cpp index 5a7958492f..1ed7713bf1 100644 --- a/search/pre_ranker.cpp +++ b/search/pre_ranker.cpp @@ -258,15 +258,13 @@ void PreRanker::ClearCaches() void PreRanker::FilterForViewportSearch() { auto const & viewport = m_params.m_viewport; - size_t tokensNumber = 0; - strings::Tokenize(m_params.m_query, " ", - [&tokensNumber](auto const & /* token */) { ++tokensNumber; }); - base::EraseIf(m_results, [&viewport, &tokensNumber](PreRankerResult const & result) { + base::EraseIf(m_results, [&](PreRankerResult const & result) { auto const & info = result.GetInfo(); if (!viewport.IsPointInside(info.m_center)) return true; - return result.GetMatchedTokensNumber() + 1 < tokensNumber; + + return result.GetMatchedTokensNumber() + 1 < m_params.m_numQueryTokens; }); SweepNearbyResults(m_params.m_minDistanceOnMapBetweenResults, m_prevEmit, m_results); diff --git a/search/pre_ranker.hpp b/search/pre_ranker.hpp index 74ce7491a9..ab0dc4c19c 100644 --- a/search/pre_ranker.hpp +++ b/search/pre_ranker.hpp @@ -54,7 +54,7 @@ public: bool m_viewportSearch = false; bool m_categorialRequest = false; - std::string m_query; + size_t m_numQueryTokens = 0; }; PreRanker(DataSource const & dataSource, Ranker & ranker); diff --git a/search/processor.cpp b/search/processor.cpp index 91758483a5..197c380dc5 100644 --- a/search/processor.cpp +++ b/search/processor.cpp @@ -750,7 +750,7 @@ void Processor::InitPreRanker(Geocoder::Params const & geocoderParams, params.m_limit = max(SearchParams::kPreResultsCount, searchParams.m_maxNumResults); params.m_viewportSearch = viewportSearch; params.m_categorialRequest = geocoderParams.IsCategorialRequest(); - params.m_query = searchParams.m_query; + params.m_numQueryTokens = geocoderParams.GetNumTokens(); m_preRanker.Init(params); } diff --git a/search/search_integration_tests/processor_test.cpp b/search/search_integration_tests/processor_test.cpp index a433359b3e..d50434d995 100644 --- a/search/search_integration_tests/processor_test.cpp +++ b/search/search_integration_tests/processor_test.cpp @@ -2522,7 +2522,7 @@ UNIT_CLASS_TEST(ProcessorTest, ViewportFilter) params.m_viewport = m2::RectD(m2::PointD(-1.0, -1.0), m2::PointD(1.0, 1.0)); params.m_mode = Mode::Everywhere; - // |street23| should be in everyvhere search results because everywhere search mode does not + // |street23| should be in everywhere search results because everywhere search mode does not // have matched tokens number restriction. Rules const rulesViewport = {ExactMatch(countryId, street23), ExactMatch(countryId, street8)};