SELECT 'Three little birds are sitting on a tree'::tsvector @@ to_tsquery('simple','birds');

我是否可以在查询中进行修改,以便在句子中定义搜索词必须满足的特定位置?
在本例中,“birds”位于句子的第三个位置,因此我可以修改约束,使其仅在给定位置找到匹配项时返回true,如
to_tsquery2('simple','birds',3) // => true

虽然
to_tsquery2('simple','birds',5)  // => false

最佳答案

在PostgreSQL全文搜索中没有这方面的规定。
但你可以在文本前加上一个“标记”,然后滥用短语搜索:

SELECT to_tsvector('simple',
                   'quagga '
                      || 'Three little birds are sitting on a tree'
       )
    @@ to_tsquery('simple',
                  'quagga <3> ' || 'birds'
       );

 ?column?
----------
 t
(1 row)

短语a <3> b匹配一个包含ab的句子,中间有两个作品。
您必须使用文本中不出现的quagga

09-11 06:24