postgresql/src/backend/tsearch
Alexander Korotkov 0c4f355c6a Fix parsing of complex morphs to tsquery
When to_tsquery() or websearch_to_tsquery() meet a complex morph containing
multiple words residing adjacent position, these words are connected
with OP_AND operator.  That leads to surprising results.  For instace,
both websearch_to_tsquery('"pg_class pg"') and to_tsquery('pg_class <-> pg')
produce '( pg & class ) <-> pg' tsquery.  This tsquery requires
'pg' and 'class' words to reside on the same position and doesn't match
to to_tsvector('pg_class pg').  It appears to be ridiculous behavior, which
needs to be fixed.

This commit makes to_tsquery() or websearch_to_tsquery() connect words
residing adjacent position with OP_PHRASE.  Therefore, now those words are
normally chained with other OP_PHRASE operator.  The examples of above now
produces 'pg <-> class <-> pg' tsquery, which matches to
to_tsvector('pg_class pg').

Another effect of this commit is that complex morph word positions now need to
match the tsvector even if there is no surrounding OP_PHRASE.  This behavior
change generally looks like an improvement but making this commit not
backpatchable.

Reported-by: Barry Pederson
Bug: #16592
Discussion: https://postgr.es/m/16592-70b110ff9731c07d@postgresql.org
Discussion: https://postgr.es/m/CAPpHfdv0EzVhf6CWfB1_TTZqXV_2Sn-jSY3zSd7ePH%3D-%2B1V2DQ%40mail.gmail.com
Author: Alexander Korotkov
Reviewed-by: Tom Lane, Neil Chen
2021-01-31 20:14:29 +03:00
..
dicts Update copyright for 2019 2019-01-02 12:44:25 -05:00
Makefile Update copyright for 2021 2021-01-02 13:06:25 -05:00
dict.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
dict_ispell.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
dict_simple.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
dict_synonym.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
dict_thesaurus.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
regis.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
spell.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
to_tsany.c Fix parsing of complex morphs to tsquery 2021-01-31 20:14:29 +03:00
ts_locale.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
ts_parse.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
ts_selfuncs.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
ts_typanalyze.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
ts_utils.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
wparser.c Update copyright for 2021 2021-01-02 13:06:25 -05:00
wparser_def.c Update copyright for 2021 2021-01-02 13:06:25 -05:00