diff --git a/search/ranker.cpp b/search/ranker.cpp index d019948dc2..aef4a217e1 100644 --- a/search/ranker.cpp +++ b/search/ranker.cpp @@ -13,6 +13,7 @@ #include "indexer/data_source.hpp" #include "indexer/feature_algo.hpp" +#include "indexer/ftypes_matcher.hpp" #include "indexer/search_string_utils.hpp" #include "platform/preferred_languages.hpp" @@ -77,6 +78,13 @@ NameScores GetNameScores(FeatureType & ft, Geocoder::Params const & params, if (type == Model::TYPE_BUILDING) UpdateNameScores(ft.GetHouseNumber(), sliceNoCategories, bestScores); + if (ftypes::IsAirportChecker::Instance()(ft)) + { + string const iata = ft.GetMetadata().Get(feature::Metadata::FMD_AIRPORT_IATA); + if (!iata.empty()) + UpdateNameScores(iata, sliceNoCategories, bestScores); + } + return bestScores; } diff --git a/search/search_integration_tests/processor_test.cpp b/search/search_integration_tests/processor_test.cpp index e3b0f09a40..da95b721a0 100644 --- a/search/search_integration_tests/processor_test.cpp +++ b/search/search_integration_tests/processor_test.cpp @@ -92,6 +92,29 @@ public: private: string m_cuisine; }; + +class TestAirport : public TestPOI +{ +public: + TestAirport(m2::PointD const & center, string const & name, string const & lang, string const & iata) + : TestPOI(center, name, lang), m_iata(iata) + { + SetTypes({{"aeroway", "aerodrome"}}); + } + + // TestPOI overrides: + void Serialize(FeatureBuilder1 & fb) const override + { + TestPOI::Serialize(fb); + + auto & metadata = fb.GetMetadataForTesting(); + metadata.Set(feature::Metadata::FMD_AIRPORT_IATA, m_iata); + } + +private: + string m_iata; +}; + class ProcessorTest : public SearchTest { }; @@ -1503,5 +1526,30 @@ UNIT_CLASS_TEST(ProcessorTest, CuisineMetadataTest) TEST(ResultsMatch("tapas ", "en", rules), ()); } } + +UNIT_CLASS_TEST(ProcessorTest, AirportTest) +{ + string const countryName = "Wonderland"; + + TestAirport vko(m2::PointD(1.0, 1.0), "Useless name", "en", "VKO"); + TestAirport svo(m2::PointD(1.0, 1.0), "Useless name", "en", "SVO"); + + auto countryId = BuildCountry(countryName, [&](TestMwmBuilder & builder) { + builder.Add(vko); + builder.Add(svo); + }); + + SetViewport(m2::RectD(-1, -1, 1, 1)); + + { + TRules rules{ExactMatch(countryId, vko)}; + TEST(ResultsMatch("vko ", "en", rules), ()); + } + + { + TRules rules{ExactMatch(countryId, svo)}; + TEST(ResultsMatch("svo ", "en", rules), ()); + } +} } // namespace } // namespace search