From 1da67cc18f22feae5059cf8adc59b03d7aa6ded4 Mon Sep 17 00:00:00 2001 From: tatiana-yan Date: Wed, 19 Jun 2019 13:50:46 +0300 Subject: [PATCH] [search][search_quality] Collect features for all results with known relevance. Do not mark unknown results as irrelevant. --- search/processor.cpp | 1 + search/ranker.hpp | 4 ++-- search/search_params.hpp | 2 ++ .../features_collector_tool.cpp | 21 ++++++++++++------- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/search/processor.cpp b/search/processor.cpp index 11f3fa9c7e..bd73a6d2bc 100644 --- a/search/processor.cpp +++ b/search/processor.cpp @@ -590,6 +590,7 @@ void Processor::InitRanker(Geocoder::Params const & geocoderParams, if (viewportSearch) params.m_viewport = GetViewport(); + params.m_batchSize = searchParams.m_batchSize; params.m_limit = searchParams.m_maxNumResults; params.m_pivot = m_position ? *m_position : GetViewport().Center(); params.m_pivotRegion = GetPivotRegion(); diff --git a/search/ranker.hpp b/search/ranker.hpp index 17f354b461..85d6a73dd4 100644 --- a/search/ranker.hpp +++ b/search/ranker.hpp @@ -72,8 +72,8 @@ public: Locales m_categoryLocales; - // Default batch size. Override if needed. - size_t m_batchSize = 10; + // The maximum number of results in a single emit. + size_t m_batchSize = 0; // The maximum total number of results to be emitted in all batches. size_t m_limit = 0; diff --git a/search/search_params.hpp b/search/search_params.hpp index dd151003e2..b3b5a62c7c 100644 --- a/search/search_params.hpp +++ b/search/search_params.hpp @@ -21,6 +21,7 @@ class Tracer; struct SearchParams { static size_t const kDefaultNumBookmarksResults = 1000; + static size_t const kDefaultBatchSizeEverywhere = 10; static size_t const kDefaultNumResultsEverywhere = 30; static size_t const kDefaultNumResultsInViewport = 200; @@ -40,6 +41,7 @@ struct SearchParams boost::optional m_position; m2::RectD m_viewport; + size_t m_batchSize = kDefaultBatchSizeEverywhere; size_t m_maxNumResults = kDefaultNumResultsEverywhere; // Minimal distance between search results in mercators, needed for diff --git a/search/search_quality/features_collector_tool/features_collector_tool.cpp b/search/search_quality/features_collector_tool/features_collector_tool.cpp index cdd4faed55..761f7653d5 100644 --- a/search/search_quality/features_collector_tool/features_collector_tool.cpp +++ b/search/search_quality/features_collector_tool/features_collector_tool.cpp @@ -150,6 +150,8 @@ int main(int argc, char * argv[]) search::SearchParams params; sample.FillSearchParams(params); + params.m_batchSize = 100; + params.m_maxNumResults = 300; TestSearchRequest request(*engine, params); request.Run(); @@ -163,25 +165,28 @@ int main(int argc, char * argv[]) { if (results[j].GetResultType() != Result::Type::Feature) continue; + if (actualMatching[j] == Matcher::kInvalidId) + continue; + auto const & info = results[j].GetRankingInfo(); cout << i << ","; info.ToCSV(cout); - auto relevance = Sample::Result::Relevance::Irrelevant; - if (actualMatching[j] != Matcher::kInvalidId) - relevance = sample.m_results[actualMatching[j]].m_relevance; + auto const relevance = sample.m_results[actualMatching[j]].m_relevance; cout << "," << DebugPrint(relevance) << endl; } auto & s = stats[i]; for (size_t j = 0; j < goldenMatching.size(); ++j) { - if (goldenMatching[j] == Matcher::kInvalidId && - sample.m_results[j].m_relevance != Sample::Result::Relevance::Irrelevant && - sample.m_results[j].m_relevance != Sample::Result::Relevance::Harmful) - { + auto const wasNotFound = + goldenMatching[j] == Matcher::kInvalidId || + goldenMatching[j] >= search::SearchParams::kDefaultNumResultsEverywhere; + auto const isRelevant = + sample.m_results[j].m_relevance == Sample::Result::Relevance::Relevant || + sample.m_results[j].m_relevance == Sample::Result::Relevance::Vital; + if (wasNotFound && isRelevant) s.m_notFound.push_back(j); - } } }