mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-12 05:44:06 +00:00
remove lookup by address only
There are too many lookups where the address is very frequent, even when many address parts are present.
This commit is contained in:
@@ -212,13 +212,6 @@ class SearchBuilder:
|
|||||||
|
|
||||||
exp_count = min(exp_count, min(t.count for t in addr_partials)) \
|
exp_count = min(exp_count, min(t.count for t in addr_partials)) \
|
||||||
if addr_partials else exp_count
|
if addr_partials else exp_count
|
||||||
if exp_count < 1000 and len(addr_tokens) > 3 and partials_indexed:
|
|
||||||
# Lookup by address partials and restrict results through name terms.
|
|
||||||
# Give this a small penalty because lookups in the address index are
|
|
||||||
# more expensive
|
|
||||||
yield penalty + exp_count/5000, exp_count,\
|
|
||||||
dbf.lookup_by_addr(name_tokens, addr_tokens)
|
|
||||||
return
|
|
||||||
|
|
||||||
# Partial term to frequent. Try looking up by rare full names first.
|
# Partial term to frequent. Try looking up by rare full names first.
|
||||||
name_fulls = self.query.get_tokens(name, TokenType.WORD)
|
name_fulls = self.query.get_tokens(name, TokenType.WORD)
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ def test_country_search_with_country_restriction():
|
|||||||
assert set(search.countries.values) == {'en'}
|
assert set(search.countries.values) == {'en'}
|
||||||
|
|
||||||
|
|
||||||
def test_country_search_with_confllicting_country_restriction():
|
def test_country_search_with_conflicting_country_restriction():
|
||||||
q = make_query([(1, TokenType.COUNTRY, [(2, 'de'), (3, 'en')])])
|
q = make_query([(1, TokenType.COUNTRY, [(2, 'de'), (3, 'en')])])
|
||||||
builder = SearchBuilder(q, SearchDetails.from_kwargs({'countries': 'fr'}))
|
builder = SearchBuilder(q, SearchDetails.from_kwargs({'countries': 'fr'}))
|
||||||
|
|
||||||
@@ -369,20 +369,6 @@ def test_infrequent_partials_in_name():
|
|||||||
{('name_vector', 'lookup_all'), ('nameaddress_vector', 'restrict')}
|
{('name_vector', 'lookup_all'), ('nameaddress_vector', 'restrict')}
|
||||||
|
|
||||||
|
|
||||||
def test_frequent_partials_in_name_but_not_in_address():
|
|
||||||
searches = make_counted_searches(10000, 1, 1, 1, num_address_parts=4)
|
|
||||||
|
|
||||||
assert len(searches) == 1
|
|
||||||
search = searches[0]
|
|
||||||
|
|
||||||
assert isinstance(search, dbs.PlaceSearch)
|
|
||||||
assert len(search.lookups) == 2
|
|
||||||
assert len(search.rankings) == 2
|
|
||||||
|
|
||||||
assert set((l.column, l.lookup_type) for l in search.lookups) == \
|
|
||||||
{('nameaddress_vector', 'lookup_all'), ('name_vector', 'restrict')}
|
|
||||||
|
|
||||||
|
|
||||||
def test_frequent_partials_in_name_and_address():
|
def test_frequent_partials_in_name_and_address():
|
||||||
searches = make_counted_searches(9999, 1, 9999, 1)
|
searches = make_counted_searches(9999, 1, 9999, 1)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user