On Wed, Jun 8, 2016 at 9:01 PM, Jean-Pierre Pelletier <jppellet...@e-djuster.com> wrote: > If instead of casts, functions to_tsvector() and to_tsquery() are used, > then the results is (I think ?) as expected:
because to_tsvector() function returns positions of words. > > select to_tsvector('simple', 'cat bat fat rat') @@ to_tsquery('simple', > 'cat <-> rat'); > or > select to_tsvector('simple', 'rat cat bat fat') @@ to_tsquery('simple', > 'cat <-> rat'); > returns "false" > > select to_tsvector('simple', 'cat rat bat fat') @@ to_tsquery('simple', > 'cat <-> rat'); > returns "true" > > Jean-Pierre Pelletier > > -----Original Message----- > From: Tom Lane [mailto:t...@sss.pgh.pa.us] > Sent: Wednesday, June 8, 2016 1:12 PM > To: Teodor Sigaev; Oleg Bartunov > Cc: Jean-Pierre Pelletier; pgsql-hackers@postgresql.org > Subject: Re: [HACKERS] Should phraseto_tsquery('simple', 'blue blue') @@ > to_tsvector('simple', 'blue') be true ? > > Another thing I noticed: if you test with tsvectors that don't contain > position info, <-> seems to reduce to &, that is it doesn't enforce > relative position: > > regression=# select 'cat bat fat rat'::tsvector @@ 'cat <-> rat'::tsquery; > ?column? > ---------- > t > (1 row) > > regression=# select 'rat cat bat fat'::tsvector @@ 'cat <-> rat'::tsquery; > ?column? > ---------- > t > (1 row) > > I'm doubtful that this is a good behavior, because it seems like it can > silently mask mistakes. That is, applying <-> to a stripped tsvector > seems like user error to me. Actually throwing an error might be too > much, but perhaps we should make such cases return false not true? > > (This is against HEAD, without the patch I suggested yesterday. > It strikes me that that patch might change this behavior, if the lexemes > are all being treated as having position zero, but I have not checked.) > > regards, tom lane -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers