mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-27 06:51:42 +03:00
disallow category tokens in the middle of a query string
This already worked for left-to-right readings and now is also implemented for right-to-left reading. A qualifier must always be before or after the name.
This commit is contained in:
parent
2703442fd2
commit
fed46240d5
@ -132,6 +132,11 @@ class _TokenSequence:
|
|||||||
|
|
||||||
# Name tokens are always acceptable and don't change direction
|
# Name tokens are always acceptable and don't change direction
|
||||||
if ttype == qmod.TokenType.PARTIAL:
|
if ttype == qmod.TokenType.PARTIAL:
|
||||||
|
# qualifiers cannot appear in the middle of the qeury. They need
|
||||||
|
# to be near the next phrase.
|
||||||
|
if self.direction == -1 \
|
||||||
|
and any(t.ttype == qmod.TokenType.QUALIFIER for t in self.seq[:-1]):
|
||||||
|
return None
|
||||||
return self.direction
|
return self.direction
|
||||||
|
|
||||||
# Other tokens may only appear once
|
# Other tokens may only appear once
|
||||||
|
@ -337,3 +337,14 @@ def test_qualifier_after_housenumber():
|
|||||||
(BreakType.WORD, PhraseType.NONE, [(3, TokenType.PARTIAL)]))
|
(BreakType.WORD, PhraseType.NONE, [(3, TokenType.PARTIAL)]))
|
||||||
|
|
||||||
check_assignments(yield_token_assignments(q))
|
check_assignments(yield_token_assignments(q))
|
||||||
|
|
||||||
|
|
||||||
|
def test_qualifier_in_middle_of_phrase():
|
||||||
|
q = make_query((BreakType.START, PhraseType.NONE, [(1, TokenType.PARTIAL)]),
|
||||||
|
(BreakType.PHRASE, PhraseType.NONE, [(2, TokenType.PARTIAL)]),
|
||||||
|
(BreakType.WORD, PhraseType.NONE, [(3, TokenType.QUALIFIER)]),
|
||||||
|
(BreakType.WORD, PhraseType.NONE, [(4, TokenType.PARTIAL)]),
|
||||||
|
(BreakType.PHRASE, PhraseType.NONE, [(5, TokenType.PARTIAL)]))
|
||||||
|
|
||||||
|
check_assignments(yield_token_assignments(q))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user