Re: Rethinking the implementation of ts_headline()

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: pgsql-hackers@lists.postgresql.org, sebastian.patino-lang@posteo.net
Date: 2023-01-16T16:28:52Z
Lists: pgsql-hackers
Alvaro Herrera <alvherre@alvh.no-ip.org> writes:
> I came across #17556 which contains a different test for this, and I'm
> not sure that this patch changes things completely for the better.

Thanks for looking at my patch.  However ...

> That is, once past the 5000 words of distance, it fails to find a good
> cover, but before that it returns an acceptable headline.  However,
> after your proposed patch, we get this:

>  ts_headline │ ts_headline 
> ─────────────┼─────────────
>  {ipsum}     │ {ipsum}
> (1 fila)

I get this with the patch:

     ts_headline     |     ts_headline     
---------------------+---------------------
 {ipsum} ... {labor} | {ipsum} ... {labor}
(1 row)

which is what I'd expect, because it removes the artificial limit on
cover length that I added in 78e73e875.  So I'm wondering why you got a
different result.  Maybe something to do with locale?  I tried it in
C and en_US.utf8.

			regards, tom lane



Commits

  1. Fix ts_headline() edge cases for empty query and empty search text.

  2. Fix ts_headline() to handle ORs and phrase queries more honestly.

  3. Fix default text search parser's ts_headline code for phrase queries.