From: Sarah Hoffmann Date: Tue, 16 Jan 2024 16:19:21 +0000 (+0100) Subject: interpret stand-alone special terms always as near term X-Git-Tag: v4.4.0~26^2 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/e0ca2ce6ecfca1e5fae1131c09c759cc3be2d1b2?hp=--cc interpret stand-alone special terms always as near term Fixes #3298. --- e0ca2ce6ecfca1e5fae1131c09c759cc3be2d1b2 diff --git a/nominatim/api/search/icu_tokenizer.py b/nominatim/api/search/icu_tokenizer.py index 72e0f547..1c2565d1 100644 --- a/nominatim/api/search/icu_tokenizer.py +++ b/nominatim/api/search/icu_tokenizer.py @@ -186,7 +186,10 @@ class ICUQueryAnalyzer(AbstractQueryAnalyzer): if trange.start == 0: query.add_token(trange, qmod.TokenType.NEAR_ITEM, token) else: - query.add_token(trange, qmod.TokenType.QUALIFIER, token) + if trange.start == 0 and trange.end == query.num_token_slots(): + query.add_token(trange, qmod.TokenType.NEAR_ITEM, token) + else: + query.add_token(trange, qmod.TokenType.QUALIFIER, token) else: query.add_token(trange, DB_TO_TOKEN_TYPE[row.type], token) diff --git a/test/bdd/api/search/queries.feature b/test/bdd/api/search/queries.feature index eba903ea..b2793faa 100644 --- a/test/bdd/api/search/queries.feature +++ b/test/bdd/api/search/queries.feature @@ -136,6 +136,15 @@ Feature: Search queries | class | type | | leisure | firepit | + + Scenario: POI search in a bounded viewbox + When sending json search query "restaurants" + | viewbox | bounded | + | 9.50830,47.15253,9.52043,47.14866 | 1 | + Then results contain + | class | type | + | amenity | restaurant | + Scenario Outline: Key/value search near given coordinate can be restricted to country When sending json search query "[natural=peak] 47.06512,9.53965" with address | countrycodes | diff --git a/test/python/api/search/test_icu_query_analyzer.py b/test/python/api/search/test_icu_query_analyzer.py index 6a17e32a..2ec3a7fe 100644 --- a/test/python/api/search/test_icu_query_analyzer.py +++ b/test/python/api/search/test_icu_query_analyzer.py @@ -138,6 +138,19 @@ async def test_category_words_only_at_beginning(conn): assert not query.nodes[2].starting +@pytest.mark.asyncio +async def test_freestanding_qualifier_words_become_category(conn): + ana = await tok.create_query_analyzer(conn) + + await add_word(conn, 1, 'foo', 'S', 'FOO', {'op': '-'}) + + query = await ana.analyze_query(make_phrase('foo')) + + assert query.num_token_slots() == 1 + assert len(query.nodes[0].starting) == 1 + assert query.nodes[0].starting[0].ttype == TokenType.NEAR_ITEM + + @pytest.mark.asyncio async def test_qualifier_words(conn): ana = await tok.create_query_analyzer(conn)