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:
authortatiana-yan <tatiana.kondakova@gmail.com>2018-11-02 16:28:35 +0300
committermpimenov <mpimenov@users.noreply.github.com>2018-11-03 01:32:57 +0300
commit6344c3c60c1107556a3e536da7a07d8ec423beae (patch)
treeff97488c413c262c049f4b4174199807dedb05db
parente5688822b2695c054d8508f27bcfc36df074fe83 (diff)
[search] Index operator tag for search.
-rw-r--r--generator/search_index_builder.cpp5
-rw-r--r--search/ranker.cpp4
-rw-r--r--search/search_integration_tests/processor_test.cpp53
3 files changed, 62 insertions, 0 deletions
diff --git a/generator/search_index_builder.cpp b/generator/search_index_builder.cpp
index 83ccde2e45..0e5af08214 100644
--- a/generator/search_index_builder.cpp
+++ b/generator/search_index_builder.cpp
@@ -297,6 +297,11 @@ public:
inserter(StringUtf8Multilang::kDefaultCode, iata);
}
+ // Index operator to support "Sberbank ATM" for objects with amenity=atm and operator=Sberbank.
+ string const op = f.GetMetadata().Get(feature::Metadata::FMD_OPERATOR);
+ if (!op.empty())
+ inserter(StringUtf8Multilang::kDefaultCode, op);
+
Classificator const & c = classif();
vector<uint32_t> categoryTypes;
diff --git a/search/ranker.cpp b/search/ranker.cpp
index aef4a217e1..914b99cf9f 100644
--- a/search/ranker.cpp
+++ b/search/ranker.cpp
@@ -85,6 +85,10 @@ NameScores GetNameScores(FeatureType & ft, Geocoder::Params const & params,
UpdateNameScores(iata, sliceNoCategories, bestScores);
}
+ string const op = ft.GetMetadata().Get(feature::Metadata::FMD_OPERATOR);
+ if (!op.empty())
+ UpdateNameScores(op, sliceNoCategories, bestScores);
+
return bestScores;
}
diff --git a/search/search_integration_tests/processor_test.cpp b/search/search_integration_tests/processor_test.cpp
index da95b721a0..2ff2fa9ab4 100644
--- a/search/search_integration_tests/processor_test.cpp
+++ b/search/search_integration_tests/processor_test.cpp
@@ -115,6 +115,28 @@ private:
string m_iata;
};
+class TestATM : public TestPOI
+{
+public:
+ TestATM(m2::PointD const & center, string const & op, string const & lang)
+ : TestPOI(center, {} /* name */, lang), m_operator(op)
+ {
+ SetTypes({{"amenity", "atm"}});
+ }
+
+ // TestPOI overrides:
+ void Serialize(FeatureBuilder1 & fb) const override
+ {
+ TestPOI::Serialize(fb);
+
+ auto & metadata = fb.GetMetadataForTesting();
+ metadata.Set(feature::Metadata::FMD_OPERATOR, m_operator);
+ }
+
+private:
+ string m_operator;
+};
+
class ProcessorTest : public SearchTest
{
};
@@ -1551,5 +1573,36 @@ UNIT_CLASS_TEST(ProcessorTest, AirportTest)
TEST(ResultsMatch("svo ", "en", rules), ());
}
}
+
+UNIT_CLASS_TEST(ProcessorTest, OperatorTest)
+{
+ string const countryName = "Wonderland";
+
+ TestATM sber(m2::PointD(1.0, 1.0), "Sberbank", "en");
+ TestATM alfa(m2::PointD(1.0, 1.0), "Alfa bank", "en");
+
+ auto countryId = BuildCountry(countryName, [&](TestMwmBuilder & builder) {
+ builder.Add(sber);
+ builder.Add(alfa);
+ });
+
+ SetViewport(m2::RectD(-1, -1, 1, 1));
+
+ {
+ TRules rules{ExactMatch(countryId, sber)};
+ TEST(ResultsMatch("sberbank ", "en", rules), ());
+ TEST(ResultsMatch("sberbank atm ", "en", rules), ());
+ TEST(ResultsMatch("atm sberbank ", "en", rules), ());
+ }
+
+ {
+ TRules rules{ExactMatch(countryId, alfa)};
+ TEST(ResultsMatch("alfa bank ", "en", rules), ());
+ TEST(ResultsMatch("alfa bank atm ", "en", rules), ());
+ TEST(ResultsMatch("alfa atm ", "en", rules), ());
+ TEST(ResultsMatch("atm alfa bank ", "en", rules), ());
+ TEST(ResultsMatch("atm alfa ", "en", rules), ());
+ }
+}
} // namespace
} // namespace search