diff options
author | Anatoly Serdtcev <serdtcev@maps.me> | 2019-03-07 15:28:47 +0300 |
---|---|---|
committer | Anatoly Serdtcev <serdtcev@maps.me> | 2019-03-11 12:25:39 +0300 |
commit | 70ecaf1e1eaf53baf9da3102304a2347fc937a87 (patch) | |
tree | b54b2fc0324d5a13af4667323628f932d9132201 /geocoder | |
parent | 8fdaabf36155e4631a25feb330798229dda8bc77 (diff) |
[geocoder] Optimize CPU: no index street synonym only
Diffstat (limited to 'geocoder')
-rw-r--r-- | geocoder/index.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/geocoder/index.cpp b/geocoder/index.cpp index 21b30be043..cdd4ff2b70 100644 --- a/geocoder/index.cpp +++ b/geocoder/index.cpp @@ -83,11 +83,25 @@ void Index::AddStreet(DocId const & docId, Index::Doc const & doc) { CHECK_EQUAL(doc.m_type, Type::Street, ()); size_t const t = static_cast<size_t>(doc.m_type); + + auto isStreetSuffix = [] (std::string const & s) { + return search::IsStreetSynonym(strings::MakeUniString(s)); + }; + + if (all_of(begin(doc.m_address[t]), end(doc.m_address[t]), isStreetSuffix)) + { + LOG(LDEBUG, ("Undefined proper name in tokens ", doc.m_address[t], "of street entry", + doc.m_osmId, "(", doc.m_address, ")")); + if (doc.m_address[t].size() > 1) + m_docIdsByTokens[MakeIndexKey(doc.m_address[t])].emplace_back(docId); + return; + } + m_docIdsByTokens[MakeIndexKey(doc.m_address[t])].emplace_back(docId); for (size_t i = 0; i < doc.m_address[t].size(); ++i) { - if (!search::IsStreetSynonym(strings::MakeUniString(doc.m_address[t][i]))) + if (!isStreetSuffix(doc.m_address[t][i])) continue; auto addr = doc.m_address[t]; addr.erase(addr.begin() + i); |