Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--defines.hpp2
-rw-r--r--generator/generator_tests_support/test_mwm_builder.cpp2
-rw-r--r--generator/generator_tool/generator_tool.cpp2
-rw-r--r--generator/popular_places_section_builder.cpp2
-rw-r--r--indexer/indexer_tests/rank_table_test.cpp14
-rw-r--r--indexer/rank_table.cpp16
-rw-r--r--indexer/rank_table.hpp8
-rw-r--r--search/geocoder.cpp2
-rw-r--r--search/intermediate_result.hpp11
-rw-r--r--search/locality_finder.cpp2
-rw-r--r--search/pre_ranker.cpp7
-rw-r--r--search/pre_ranking_info.cpp1
-rw-r--r--search/pre_ranking_info.hpp3
-rw-r--r--search/rank_table_cache.cpp2
-rw-r--r--search/ranker.cpp1
-rw-r--r--search/ranking_info.cpp3
-rw-r--r--search/ranking_info.hpp3
-rw-r--r--search/result.cpp5
-rw-r--r--search/result.hpp2
19 files changed, 57 insertions, 31 deletions
diff --git a/defines.hpp b/defines.hpp
index 207e6c8ec8..26c11a403e 100644
--- a/defines.hpp
+++ b/defines.hpp
@@ -40,7 +40,7 @@
#define CROSS_MWM_FILE_TAG "cross_mwm"
#define FEATURE_OFFSETS_FILE_TAG "offs"
#define RANKS_FILE_TAG "ranks"
-#define POPULAR_PLACES_FILE_TAG "popular_places"
+#define POPULARITY_RANKS_FILE_TAG "popularity_ranks"
#define REGION_INFO_FILE_TAG "rgninfo"
#define METALINES_FILE_TAG "metalines"
// Temporary addresses section that is used in search index generation.
diff --git a/generator/generator_tests_support/test_mwm_builder.cpp b/generator/generator_tests_support/test_mwm_builder.cpp
index d82ccfb73f..eb8717fa80 100644
--- a/generator/generator_tests_support/test_mwm_builder.cpp
+++ b/generator/generator_tests_support/test_mwm_builder.cpp
@@ -140,7 +140,7 @@ void TestMwmBuilder::Finish()
CHECK(indexer::BuildCentersTableFromDataFile(path, true /* forceRebuild */),
("Can't build centers table."));
- CHECK(search::SearchRanksTableBuilder::CreateIfNotExists(path), ());
+ CHECK(search::SearchRankTableBuilder::CreateIfNotExists(path), ());
if (!m_languages.empty())
CHECK(WriteRegionDataForTests(path, m_languages), ());
diff --git a/generator/generator_tool/generator_tool.cpp b/generator/generator_tool/generator_tool.cpp
index e11b45d461..93639d7867 100644
--- a/generator/generator_tool/generator_tool.cpp
+++ b/generator/generator_tool/generator_tool.cpp
@@ -388,7 +388,7 @@ int main(int argc, char ** argv)
LOG(LCRITICAL, ("Error generating search index."));
LOG(LINFO, ("Generating rank table for", datFile));
- if (!search::SearchRanksTableBuilder::CreateIfNotExists(datFile))
+ if (!search::SearchRankTableBuilder::CreateIfNotExists(datFile))
LOG(LCRITICAL, ("Error generating rank table."));
LOG(LINFO, ("Generating centers table for", datFile));
diff --git a/generator/popular_places_section_builder.cpp b/generator/popular_places_section_builder.cpp
index 21bd08e99f..20ef44a870 100644
--- a/generator/popular_places_section_builder.cpp
+++ b/generator/popular_places_section_builder.cpp
@@ -110,7 +110,7 @@ bool BuildPopularPlacesMwmSection(std::string const & srcFilename, std::string c
return true;
FilesContainerW cont(mwmFile, FileWriter::OP_WRITE_EXISTING);
- search::RankTableBuilder::Create(content, cont, POPULAR_PLACES_FILE_TAG);
+ search::RankTableBuilder::Create(content, cont, POPULARITY_RANKS_FILE_TAG);
return true;
}
} // namespace generator
diff --git a/indexer/indexer_tests/rank_table_test.cpp b/indexer/indexer_tests/rank_table_test.cpp
index 90a9731621..2be200eb2e 100644
--- a/indexer/indexer_tests/rank_table_test.cpp
+++ b/indexer/indexer_tests/rank_table_test.cpp
@@ -37,7 +37,7 @@ void TestTable(vector<uint8_t> const & ranks, string const & path)
// Tries to load table via file read.
{
FilesContainerR rcont(path);
- auto table = search::RankTable::Load(rcont);
+ auto table = search::RankTable::Load(rcont, RANKS_FILE_TAG);
TEST(table, ());
TestTable(ranks, *table);
}
@@ -45,7 +45,7 @@ void TestTable(vector<uint8_t> const & ranks, string const & path)
// Tries to load table via file mapping.
{
FilesMappingContainer mcont(path);
- auto table = search::RankTable::Load(mcont);
+ auto table = search::RankTable::Load(mcont, RANKS_FILE_TAG);
TEST(table, ());
TestTable(ranks, *table);
}
@@ -89,7 +89,7 @@ UNIT_TEST(RankTableBuilder_EndToEnd)
vector<uint8_t> ranks;
{
FilesContainerR rcont(mapPath);
- search::SearchRanksTableBuilder::CalcSearchRanks(rcont, ranks);
+ search::SearchRankTableBuilder::CalcSearchRanks(rcont, ranks);
}
{
@@ -119,7 +119,7 @@ UNIT_TEST(RankTableBuilder_WrongEndianness)
unique_ptr<search::RankTable> table;
{
FilesContainerR rcont(kTestFile);
- table = search::RankTable::Load(rcont);
+ table = search::RankTable::Load(rcont, RANKS_FILE_TAG);
TEST(table.get(), ());
TestTable(ranks, *table);
}
@@ -139,7 +139,7 @@ UNIT_TEST(RankTableBuilder_WrongEndianness)
// Try to load rank table from opposite endianness.
{
FilesContainerR rcont(kTestFile);
- auto table = search::RankTable::Load(rcont);
+ auto table = search::RankTable::Load(rcont, RANKS_FILE_TAG);
TEST(table.get(), ());
TestTable(ranks, *table);
}
@@ -147,12 +147,12 @@ UNIT_TEST(RankTableBuilder_WrongEndianness)
// It's impossible to map rank table from opposite endianness.
{
FilesMappingContainer mcont(kTestFile);
- auto table = search::RankTable::Load(mcont);
+ auto table = search::RankTable::Load(mcont, RANKS_FILE_TAG);
TEST(!table.get(), ());
}
// Try to re-create rank table in test file.
- TEST(search::SearchRanksTableBuilder::CreateIfNotExists(kTestFile), ());
+ TEST(search::SearchRankTableBuilder::CreateIfNotExists(kTestFile), ());
// Try to load and map rank table - both methods should work now.
TestTable(ranks, kTestFile);
diff --git a/indexer/rank_table.cpp b/indexer/rank_table.cpp
index 62a11b8dbc..b275f321c5 100644
--- a/indexer/rank_table.cpp
+++ b/indexer/rank_table.cpp
@@ -287,7 +287,7 @@ unique_ptr<RankTable> CreateRankTableIfNotExists(FilesContainerR & rcont)
if (!table)
{
vector<uint8_t> ranks;
- SearchRanksTableBuilder::CalcSearchRanks(rcont, ranks);
+ SearchRankTableBuilder::CalcSearchRanks(rcont, ranks);
table = make_unique<RankTableV0>(ranks);
}
@@ -296,19 +296,19 @@ unique_ptr<RankTable> CreateRankTableIfNotExists(FilesContainerR & rcont)
} // namespace
// static
-unique_ptr<RankTable> RankTable::Load(FilesContainerR const & rcont)
+unique_ptr<RankTable> RankTable::Load(FilesContainerR const & rcont, string const & sectionName)
{
- return LoadRankTable(GetMemoryRegionForTag(rcont, RANKS_FILE_TAG));
+ return LoadRankTable(GetMemoryRegionForTag(rcont, sectionName));
}
// static
-unique_ptr<RankTable> RankTable::Load(FilesMappingContainer const & mcont)
+unique_ptr<RankTable> RankTable::Load(FilesMappingContainer const & mcont, string const & sectionName)
{
- return LoadRankTable(GetMemoryRegionForTag(mcont, RANKS_FILE_TAG));
+ return LoadRankTable(GetMemoryRegionForTag(mcont, sectionName));
}
// static
-void SearchRanksTableBuilder::CalcSearchRanks(FilesContainerR & rcont, vector<uint8_t> & ranks)
+void SearchRankTableBuilder::CalcSearchRanks(FilesContainerR & rcont, vector<uint8_t> & ranks)
{
feature::DataHeader header(rcont);
FeaturesVector featuresVector(rcont, header, nullptr /* features offsets table */);
@@ -320,7 +320,7 @@ void SearchRanksTableBuilder::CalcSearchRanks(FilesContainerR & rcont, vector<ui
}
// static
-bool SearchRanksTableBuilder::CreateIfNotExists(platform::LocalCountryFile const & localFile) noexcept
+bool SearchRankTableBuilder::CreateIfNotExists(platform::LocalCountryFile const & localFile) noexcept
{
try
{
@@ -351,7 +351,7 @@ bool SearchRanksTableBuilder::CreateIfNotExists(platform::LocalCountryFile const
}
// static
-bool SearchRanksTableBuilder::CreateIfNotExists(string const & mapPath) noexcept
+bool SearchRankTableBuilder::CreateIfNotExists(string const & mapPath) noexcept
{
try
{
diff --git a/indexer/rank_table.hpp b/indexer/rank_table.hpp
index 43197e0753..6f2a19886c 100644
--- a/indexer/rank_table.hpp
+++ b/indexer/rank_table.hpp
@@ -70,7 +70,8 @@ public:
// *NOTE* Return value can outlive |rcont|. Also note that there is
// undefined behaviour if ranks section exists but internally
// damaged.
- static std::unique_ptr<RankTable> Load(FilesContainerR const & rcont);
+ static std::unique_ptr<RankTable> Load(FilesContainerR const & rcont,
+ std::string const & sectionName);
// Maps whole section corresponding to a rank table and deserializes
// it. Returns nullptr if there're no ranks section, rank table's
@@ -81,7 +82,8 @@ public:
// destructed before |mcont| is closed. Also note that there're
// undefined behaviour if ranks section exists but internally
// damaged.
- static std::unique_ptr<RankTable> Load(FilesMappingContainer const & mcont);
+ static std::unique_ptr<RankTable> Load(FilesMappingContainer const & mcont,
+ std::string const & sectionName);
};
// A builder class for rank tables.
@@ -95,7 +97,7 @@ public:
std::string const & sectionName);
};
-class SearchRanksTableBuilder
+class SearchRankTableBuilder
{
public:
// Calculates search ranks for all features in an mwm.
diff --git a/search/geocoder.cpp b/search/geocoder.cpp
index 69b98d5050..941e53eb49 100644
--- a/search/geocoder.cpp
+++ b/search/geocoder.cpp
@@ -145,7 +145,7 @@ private:
{
if (m_table)
return;
- m_table = search::RankTable::Load(m_value.m_cont);
+ m_table = search::RankTable::Load(m_value.m_cont, RANKS_FILE_TAG);
if (!m_table)
m_table = make_unique<search::DummyRankTable>();
}
diff --git a/search/intermediate_result.hpp b/search/intermediate_result.hpp
index 15f0c97658..8b5b10de6b 100644
--- a/search/intermediate_result.hpp
+++ b/search/intermediate_result.hpp
@@ -34,11 +34,12 @@ public:
static bool LessRank(PreRankerResult const & r1, PreRankerResult const & r2);
static bool LessDistance(PreRankerResult const & r1, PreRankerResult const & r2);
- inline FeatureID GetId() const { return m_id; }
- inline double GetDistance() const { return m_info.m_distanceToPivot; }
- inline uint8_t GetRank() const { return m_info.m_rank; }
- inline PreRankingInfo & GetInfo() { return m_info; }
- inline PreRankingInfo const & GetInfo() const { return m_info; }
+ FeatureID GetId() const { return m_id; }
+ double GetDistance() const { return m_info.m_distanceToPivot; }
+ uint8_t GetRank() const { return m_info.m_rank; }
+ uint8_t GetPopularity() const { return m_info.m_popularity; }
+ PreRankingInfo & GetInfo() { return m_info; }
+ PreRankingInfo const & GetInfo() const { return m_info; }
private:
friend class RankerResult;
diff --git a/search/locality_finder.cpp b/search/locality_finder.cpp
index 52e9b2f977..bbe5c9354e 100644
--- a/search/locality_finder.cpp
+++ b/search/locality_finder.cpp
@@ -243,7 +243,7 @@ void LocalityFinder::LoadVicinity(m2::PointD const & p, bool loadCities, bool lo
{
auto const & value = *handle.GetValue<MwmValue>();
if (!m_ranks)
- m_ranks = RankTable::Load(value.m_cont);
+ m_ranks = RankTable::Load(value.m_cont, RANKS_FILE_TAG);
if (!m_ranks)
m_ranks = make_unique<DummyRankTable>();
diff --git a/search/pre_ranker.cpp b/search/pre_ranker.cpp
index d1a9cdf107..6648c59f3b 100644
--- a/search/pre_ranker.cpp
+++ b/search/pre_ranker.cpp
@@ -71,6 +71,7 @@ void PreRanker::FillMissingFieldsInPreResults()
MwmSet::MwmId mwmId;
MwmSet::MwmHandle mwmHandle;
unique_ptr<RankTable> ranks = make_unique<DummyRankTable>();
+ unique_ptr<RankTable> popularityRanks = make_unique<DummyRankTable>();
unique_ptr<LazyCentersTable> centers;
m_pivotFeatures.SetPosition(m_params.m_accuratePivotCenter, m_params.m_scale);
@@ -86,7 +87,9 @@ void PreRanker::FillMissingFieldsInPreResults()
centers.reset();
if (mwmHandle.IsAlive())
{
- ranks = RankTable::Load(mwmHandle.GetValue<MwmValue>()->m_cont);
+ ranks = RankTable::Load(mwmHandle.GetValue<MwmValue>()->m_cont, RANKS_FILE_TAG);
+ popularityRanks = RankTable::Load(mwmHandle.GetValue<MwmValue>()->m_cont,
+ POPULARITY_RANKS_FILE_TAG);
centers = make_unique<LazyCentersTable>(*mwmHandle.GetValue<MwmValue>());
}
if (!ranks)
@@ -94,6 +97,8 @@ void PreRanker::FillMissingFieldsInPreResults()
}
info.m_rank = ranks->Get(id.m_index);
+ if (popularityRanks)
+ info.m_popularity = popularityRanks->Get(id.m_index);
m2::PointD center;
if (centers && centers->Get(id.m_index, center))
diff --git a/search/pre_ranking_info.cpp b/search/pre_ranking_info.cpp
index c3df59e300..2b05f68d5c 100644
--- a/search/pre_ranking_info.cpp
+++ b/search/pre_ranking_info.cpp
@@ -18,6 +18,7 @@ std::string DebugPrint(PreRankingInfo const & info)
os << "m_tokenRange[" << DebugPrint(type) << "]:" << DebugPrint(info.m_tokenRange[i]) << ",";
}
os << "m_rank:" << static_cast<int>(info.m_rank) << ",";
+ os << "m_popularity:" << static_cast<int>(info.m_popularity) << ",";
os << "m_type:" << info.m_type;
os << "]";
return os.str();
diff --git a/search/pre_ranking_info.hpp b/search/pre_ranking_info.hpp
index 36cd702a94..b19a76dd1d 100644
--- a/search/pre_ranking_info.hpp
+++ b/search/pre_ranking_info.hpp
@@ -56,6 +56,9 @@ struct PreRankingInfo
// Rank of the feature.
uint8_t m_rank = 0;
+ // Popularity rank of the feature.
+ uint8_t m_popularity = 0;
+
// Search type for the feature.
Model::Type m_type = Model::TYPE_COUNT;
};
diff --git a/search/rank_table_cache.cpp b/search/rank_table_cache.cpp
index b91087b7de..109f16dcc2 100644
--- a/search/rank_table_cache.cpp
+++ b/search/rank_table_cache.cpp
@@ -14,7 +14,7 @@ RankTable const & RankTableCache::Get(DataSource & dataSource, TId const & mwmId
return *it->second;
TKey handle(dataSource.GetMwmHandleById(mwmId));
- auto table = RankTable::Load(handle.GetValue<MwmValue>()->m_cont);
+ auto table = RankTable::Load(handle.GetValue<MwmValue>()->m_cont, RANKS_FILE_TAG);
if (!table)
table.reset(new DummyRankTable());
diff --git a/search/ranker.cpp b/search/ranker.cpp
index d0e7e3744c..2d679db1bc 100644
--- a/search/ranker.cpp
+++ b/search/ranker.cpp
@@ -259,6 +259,7 @@ class RankerResultMaker
info.m_distanceToPivot = MercatorBounds::DistanceOnEarth(center, pivot);
info.m_rank = preInfo.m_rank;
+ info.m_popularity = preInfo.m_popularity;
info.m_type = preInfo.m_type;
info.m_allTokensUsed = preInfo.m_allTokensUsed;
diff --git a/search/ranking_info.cpp b/search/ranking_info.cpp
index fa884e0579..57c72d8d8a 100644
--- a/search/ranking_info.cpp
+++ b/search/ranking_info.cpp
@@ -48,6 +48,7 @@ void RankingInfo::PrintCSVHeader(ostream & os)
{
os << "DistanceToPivot"
<< ",Rank"
+ << ",Popularity"
<< ",NameScore"
<< ",ErrorsMade"
<< ",SearchType"
@@ -62,6 +63,7 @@ string DebugPrint(RankingInfo const & info)
os << "RankingInfo [";
os << "m_distanceToPivot:" << info.m_distanceToPivot << ",";
os << "m_rank:" << static_cast<int>(info.m_rank) << ",";
+ os << "m_popularity:" << static_cast<int>(info.m_popularity) << ",";
os << "m_nameScore:" << DebugPrint(info.m_nameScore) << ",";
os << "m_errorsMade:" << DebugPrint(info.m_errorsMade) << ",";
os << "m_type:" << DebugPrint(info.m_type) << ",";
@@ -77,6 +79,7 @@ void RankingInfo::ToCSV(ostream & os) const
os << fixed;
os << m_distanceToPivot << ",";
os << static_cast<int>(m_rank) << ",";
+ os << static_cast<int>(m_popularity) << ",";
os << DebugPrint(m_nameScore) << ",";
os << GetErrorsMade() << ",";
os << DebugPrint(m_type) << ",";
diff --git a/search/ranking_info.hpp b/search/ranking_info.hpp
index efe7da45b7..da8e86f9bd 100644
--- a/search/ranking_info.hpp
+++ b/search/ranking_info.hpp
@@ -23,6 +23,9 @@ struct RankingInfo
// Rank of the feature.
uint8_t m_rank = 0;
+ // Popularity rank of the feature.
+ uint8_t m_popularity = 0;
+
// Score for the feature's name.
NameScore m_nameScore = NAME_SCORE_ZERO;
diff --git a/search/result.cpp b/search/result.cpp
index 23f0c59ff7..28c0392f7a 100644
--- a/search/result.cpp
+++ b/search/result.cpp
@@ -274,6 +274,11 @@ void Results::InsertResult(vector<Result>::iterator where, Result && result)
m_results.insert(where, move(result));
}
+std::string DebugPrint(search::Results const & results)
+{
+ return ::my::impl::DebugPrintSequence(results.begin(), results.end());
+}
+
// AddressInfo -------------------------------------------------------------------------------------
bool AddressInfo::IsEmptyName() const
{
diff --git a/search/result.hpp b/search/result.hpp
index f8b06190bd..379b965f76 100644
--- a/search/result.hpp
+++ b/search/result.hpp
@@ -246,6 +246,8 @@ private:
HotelsClassifier m_hotelsClassif;
};
+std::string DebugPrint(search::Results const & results);
+
struct AddressInfo
{
enum class Type { Default, SearchResult };