diff --git a/indexer/indexer_tests/search_string_utils_test.cpp b/indexer/indexer_tests/search_string_utils_test.cpp index b2bacc5ada..1e50b480bc 100644 --- a/indexer/indexer_tests/search_string_utils_test.cpp +++ b/indexer/indexer_tests/search_string_utils_test.cpp @@ -33,6 +33,11 @@ private: StreetTokensFilter m_filter; }; +bool TestStreetSynonym(char const * s) +{ + return IsStreetSynonym(MakeUniString(s)); +} + bool TestStreetPrefixMatch(char const * s) { return IsStreetSynonymPrefix(MakeUniString(s)); @@ -88,6 +93,14 @@ UNIT_TEST(Contains) TEST(!ContainsNormalized(kTestStr, "z"), ()); } +UNIT_TEST(StreetSynonym) +{ + TEST(TestStreetSynonym("street"), ()); + TEST(TestStreetSynonym("улица"), ()); + TEST(TestStreetSynonym("strasse"), ()); + TEST(!TestStreetSynonym("strase"), ()); +} + UNIT_TEST(StreetPrefixMatch) { TEST(TestStreetPrefixMatch("п"), ()); diff --git a/indexer/search_string_utils.cpp b/indexer/search_string_utils.cpp index 9f78a6e115..216b5b59b8 100644 --- a/indexer/search_string_utils.cpp +++ b/indexer/search_string_utils.cpp @@ -9,7 +9,6 @@ using namespace strings; namespace search { - UniString NormalizeAndSimplifyString(string const & s) { UniString uniString = MakeUniString(s); @@ -111,9 +110,6 @@ public: // English "street", "avenue", "square", "road", "boulevard", "drive", "highway", "lane", "way", "circle", "st", "av", "ave", "sq", "rd", "blvd", "dr", "hwy", "ln", - // German - "strasse", "weg", "platz", - // Lithuanian "g", "pr", "pl", "kel", @@ -127,7 +123,7 @@ public: "ulice", "ul", "náměstí", "nám", // Deutsch - German - "allee", "al", "brücke", "br", "chaussee", "gasse", "gr", "pfad", "straße", "str", + "allee", "al", "brücke", "br", "chaussee", "gasse", "gr", "pfad", "straße", "str", "weg", "platz", // Español - Spanish "avenida", "avd", "avda", "bulevar", "bulev", "calle", "calleja", "cllja", "callejón", "callej", "cjon", "cllon", "callejuela", "cjla", "callizo", "cllzo", "calzada", "czada", "costera", "coste", "plza", "pza", "plazoleta", "pzta", "plazuela", "plzla", "tránsito", "trans", "transversal", "trval", "trasera", "tras", "travesía", "trva", @@ -166,12 +162,12 @@ public: "quốc lộ", "ql", "tỉnh lộ", "tl", "Đại lộ", "Đl", "Đường", "Đ", "Đường sắt", "Đs", "Đường phố", "Đp", "vuông", "con Đường", "Đại lộ", "Đường cao tốc", // Українська - Ukrainian - "дорога", "провулок", "площа", "шосе", "вулиция", "дор", "пров", "вул" + "дорога", "провулок", "площа", "шосе", "вулиця", "дор", "пров", "вул" }; for (auto const * s : affics) { - UniString const us = MakeUniString(s); + UniString const us = NormalizeAndSimplifyString(s); m_strings.Add(us.begin(), us.end()); } } @@ -193,8 +189,7 @@ private: }; StreetsSynonymsHolder g_streets; - -} // namespace +} // namespace UniString GetStreetNameAsKey(string const & name) { @@ -248,4 +243,4 @@ void StreetTokensFilter::Put(strings::UniString const & token, bool isPrefix, si } EmitToken(token, tag); } -} // namespace search +} // namespace search diff --git a/indexer/search_string_utils.hpp b/indexer/search_string_utils.hpp index f5a905e29e..6db2a2faca 100644 --- a/indexer/search_string_utils.hpp +++ b/indexer/search_string_utils.hpp @@ -51,6 +51,7 @@ bool TokenizeStringAndCheckIfLastTokenIsPrefix(string const & s, strings::UniString GetStreetNameAsKey(string const & name); +// *NOTE* The argument string must be normalized and simplified. bool IsStreetSynonym(strings::UniString const & s); bool IsStreetSynonymPrefix(strings::UniString const & s);