Skip to content

Commit 4dcc2ba

Browse files
committed
Use search rank for sorting search results
1 parent 17021e9 commit 4dcc2ba

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

importer/src/main.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,8 @@ hstore_to_json(name) as name, hstore_to_json(extratags) as extra,
164164
COALESCE(address->'housenumber',housenumber) AS housenumber,
165165
postcode, ST_X(pl.centroid) as longitude, ST_Y(pl.centroid) as latitude,
166166
CASE
167-
WHEN sname.importance IS NOT NULL THEN (100*(1-sname.importance))::int
168-
ELSE 100 + pl.rank_search
167+
WHEN sname.importance IS NOT NULL THEN (1000*(1-sname.importance))::int
168+
ELSE 1000 + pl.rank_search
169169
END AS search_rank,
170170
osm_type, osm_id
171171
from placex pl

src/geocoder.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
using namespace GeoNLP;
1212

13-
const int GeoNLP::Geocoder::version{ 5 };
13+
const int GeoNLP::Geocoder::version{ 6 };
1414
const size_t GeoNLP::Geocoder::num_languages{ 2 }; // 1 (default) + 1 (english)
1515

1616
// typedef boost::geometry::model::point< double, 2,
@@ -245,12 +245,13 @@ bool Geocoder::search(const std::vector<Postal::ParseResult> &parsed_query,
245245
r.type = get_type(r.id);
246246
get_features(r);
247247

248-
sqlite3pp::query qry(m_db, "SELECT latitude, longitude FROM object_primary WHERE id=?");
248+
sqlite3pp::query qry(
249+
m_db, "SELECT latitude, longitude, search_rank FROM object_primary WHERE id=?");
249250
qry.bind(1, r.id);
250251
for (auto v : qry)
251252
{
252253
// only one entry is expected
253-
v.getter() >> r.latitude >> r.longitude;
254+
v.getter() >> r.latitude >> r.longitude >> r.search_rank;
254255
break;
255256
}
256257
}
@@ -611,7 +612,8 @@ bool Geocoder::search_nearby(const std::vector<std::string> &name_query,
611612
try
612613
{
613614
std::ostringstream qtxt;
614-
qtxt << "SELECT o.id, o.name, o.name_extra, o.name_en, t.name, o.latitude, o.longitude "
615+
qtxt << "SELECT o.id, o.name, o.name_extra, o.name_en, t.name, o.latitude, o.longitude, "
616+
"o.search_rank "
615617
<< "FROM object_primary o "
616618
<< "JOIN type t ON o.type_id=t.id "
617619
<< "JOIN object_primary_rtree ON (o.box_id = object_primary_rtree.id) "
@@ -649,7 +651,8 @@ bool Geocoder::search_nearby(const std::vector<std::string> &name_query,
649651
char const *name, *name_extra, *name_en;
650652
std::string type;
651653
double lat, lon, distance;
652-
v.getter() >> id >> name >> name_extra >> name_en >> type >> lat >> lon;
654+
int search_rank;
655+
v.getter() >> id >> name >> name_extra >> name_en >> type >> lat >> lon >> search_rank;
653656

654657
// check if distance is ok. note that the distance is expected
655658
// to be small (on the scale of the planet)
@@ -701,6 +704,7 @@ bool Geocoder::search_nearby(const std::vector<std::string> &name_query,
701704
r.latitude = lat;
702705
r.longitude = lon;
703706
r.distance = distance;
707+
r.search_rank = search_rank;
704708
r.levels_resolved = 1; // not used in this search
705709

706710
result.push_back(r);
@@ -799,7 +803,7 @@ bool Geocoder::search_nearby(const std::vector<std::string> &name_query,
799803
{
800804
std::ostringstream qtxt;
801805
qtxt << "SELECT o.id, o.name, o.name_extra, o.name_en, t.name, "
802-
<< "o.latitude, o.longitude "
806+
<< "o.latitude, o.longitude, o.search_rank "
803807
<< "FROM object_primary o "
804808
<< "JOIN type t ON o.type_id=t.id "
805809
<< "WHERE ";
@@ -837,7 +841,9 @@ bool Geocoder::search_nearby(const std::vector<std::string> &name_query,
837841
char const *name, *name_extra, *name_en;
838842
std::string type;
839843
double lat, lon, distance;
840-
v.getter() >> id >> name >> name_extra >> name_en >> type >> lat >> lon;
844+
int search_rank;
845+
v.getter() >> id >> name >> name_extra >> name_en >> type >> lat >> lon
846+
>> search_rank;
841847

842848
// check if distance is ok using earth as a plane approximation around the line
843849
{
@@ -918,6 +924,7 @@ bool Geocoder::search_nearby(const std::vector<std::string> &name_query,
918924
r.latitude = lat;
919925
r.longitude = lon;
920926
r.distance = distance;
927+
r.search_rank = search_rank;
921928
r.levels_resolved = 1; // not used in this search
922929

923930
result.push_back(r);

src/geocoder.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,13 @@ class Geocoder
3232
std::string website;
3333
size_t levels_resolved;
3434
size_t admin_levels = 0;
35+
double search_rank;
3536

3637
bool operator<(const GeoResult &i) const
3738
{
38-
return (admin_levels < i.admin_levels
39-
|| (admin_levels == i.admin_levels && address.length() < i.address.length())
40-
|| (admin_levels == i.admin_levels && address.length() == i.address.length()
39+
return (search_rank < i.search_rank
40+
|| (search_rank == i.search_rank && address.length() < i.address.length())
41+
|| (search_rank == i.search_rank && address.length() == i.address.length()
4142
&& address < i.address));
4243
}
4344
};

0 commit comments

Comments
 (0)