Merge pull request #3301 from lonvia/fix-class-search-regression

Interpret stand-alone special terms always as near term
This commit is contained in:
Sarah Hoffmann 2024-01-17 10:47:35 +01:00 committed by GitHub
commit bfc7acbb18
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 26 additions and 1 deletions

View File

@ -186,7 +186,10 @@ class ICUQueryAnalyzer(AbstractQueryAnalyzer):
if trange.start == 0: if trange.start == 0:
query.add_token(trange, qmod.TokenType.NEAR_ITEM, token) query.add_token(trange, qmod.TokenType.NEAR_ITEM, token)
else: 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: else:
query.add_token(trange, DB_TO_TOKEN_TYPE[row.type], token) query.add_token(trange, DB_TO_TOKEN_TYPE[row.type], token)

View File

@ -136,6 +136,15 @@ Feature: Search queries
| class | type | | class | type |
| leisure | firepit | | 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 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 When sending json search query "[natural=peak] 47.06512,9.53965" with address
| countrycodes | | countrycodes |

View File

@ -138,6 +138,19 @@ async def test_category_words_only_at_beginning(conn):
assert not query.nodes[2].starting 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 @pytest.mark.asyncio
async def test_qualifier_words(conn): async def test_qualifier_words(conn):
ana = await tok.create_query_analyzer(conn) ana = await tok.create_query_analyzer(conn)