mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-12 13:54:07 +00:00
do not run near queries on qualifier words
There is too much potential for confusion (e.g. 'Rio Grande' read as 'river near Grande') fir too little gain. Use near phrases instead.
This commit is contained in:
@@ -8,7 +8,6 @@
|
|||||||
Implementation of query analysis for the ICU tokenizer.
|
Implementation of query analysis for the ICU tokenizer.
|
||||||
"""
|
"""
|
||||||
from typing import Tuple, Dict, List, Optional, NamedTuple, Iterator, Any, cast
|
from typing import Tuple, Dict, List, Optional, NamedTuple, Iterator, Any, cast
|
||||||
from copy import copy
|
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
import dataclasses
|
import dataclasses
|
||||||
import difflib
|
import difflib
|
||||||
@@ -188,10 +187,6 @@ class ICUQueryAnalyzer(AbstractQueryAnalyzer):
|
|||||||
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)
|
query.add_token(trange, qmod.TokenType.QUALIFIER, token)
|
||||||
if trange.start == 0 or trange.end == query.num_token_slots():
|
|
||||||
token = copy(token)
|
|
||||||
token.penalty += 0.1 * (query.num_token_slots())
|
|
||||||
query.add_token(trange, qmod.TokenType.NEAR_ITEM, 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)
|
||||||
|
|
||||||
|
|||||||
@@ -148,9 +148,9 @@ async def test_qualifier_words(conn):
|
|||||||
query = await ana.analyze_query(make_phrase('foo BAR foo BAR foo'))
|
query = await ana.analyze_query(make_phrase('foo BAR foo BAR foo'))
|
||||||
|
|
||||||
assert query.num_token_slots() == 5
|
assert query.num_token_slots() == 5
|
||||||
assert set(t.ttype for t in query.nodes[0].starting) == {TokenType.NEAR_ITEM, TokenType.QUALIFIER}
|
assert set(t.ttype for t in query.nodes[0].starting) == {TokenType.QUALIFIER}
|
||||||
assert set(t.ttype for t in query.nodes[2].starting) == {TokenType.QUALIFIER}
|
assert set(t.ttype for t in query.nodes[2].starting) == {TokenType.QUALIFIER}
|
||||||
assert set(t.ttype for t in query.nodes[4].starting) == {TokenType.NEAR_ITEM, TokenType.QUALIFIER}
|
assert set(t.ttype for t in query.nodes[4].starting) == {TokenType.QUALIFIER}
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
|
|||||||
Reference in New Issue
Block a user