`ts_headline` 是否旨在突出显示查询的不匹配部分(它确实如此)?

rya*_*err 6 postgresql full-text-search

我在 Postgres 13.4 中运行一些复杂的 FTS 查询,发现了一些ts_headline意想不到的行为,至少对我来说是这样,并且不确定我是否遇到了功能或错误。;)

初始健全性检查:

SELECT plainto_tsquery('english', 'red dog') @@ to_tsvector('The quick brown fox jumped over the lazy dog.');

-- false
Run Code Online (Sandbox Code Playgroud)

不出意外:tsquery计算结果为'red' & 'dog',文档不包含'red',不匹配。但当我试图成为头条新闻时:

SELECT ts_headline('The quick brown fox jumped over the lazy dog.', plainto_tsquery('english', 'red dog'));

-- The quick brown fox jumped over the lazy <b>dog</b>.
Run Code Online (Sandbox Code Playgroud)

FOLLOWED_BY 运算符 ( <->) 也会发生同样的情况;您可以替换plainto_tsqueryphraseto_tsquery(或构造您自己的tsquery文字)。它仍然突出显示实际上不匹配的片段。

问题不是(或者至少不完全)是在ts_headline没有真正匹配的情况下尝试调用的结果。我原来的情况其实更像是:

SELECT ts_headline('I want a red dog, but not a black dog.  No red cats, either.', phraseto_tsquery('english', 'red dog'));

-- I want a <b>red</b> <b>dog</b>, but not a black <b>dog</b>.  No <b>red</b> cats, either.
Run Code Online (Sandbox Code Playgroud)

在这种情况下,考虑到tsquery评估结果为'red' <-> 'dog'(即“红色”紧随其后的是“狗”),我对最后两个亮点感到惊讶。

文档ts_headline说:

以缩写形式显示文档查询的​​匹配项,

这让我相信这是一个错误,但突出显示结果的较长简介仅说明了该功能

返回文档的摘录,其中突出显示查询中的术语

事实上,查询中的术语突出显示......

我尝试过弄乱 的 options 参数ts_headline,但没有任何改变这种行为。

那么...我是否称其错误,是否错误,或者我只是对其行为抱有错误的期望?

(似乎与这个较旧的问题无关,但它似乎描述了一个不同的错误。而且我无法判断在这种情况下到底发生了什么或没有发生或应该发生什么,所以谁知道它是否相关。)