PostgreSQL:全文搜索在tsvector中匹配词素时增加排名



有一个tsvector是这样定义的:

'foo':3A,6A,9A,12A,15,18,21,24
'bar':1A,4A,7A,10A

tsvectortsvector @@ $$'foo':* $$::tsquery匹配时,ts_rank_cdtsvector @@ $$'bar':* $$::tsquery大。

我希望bar有更大的速率,因为它是1st,而foo3rd。有办法改变这种行为吗?

(psql 13在Google云sdk上使用)

tsvector使用gin索引

感谢

您可以在tsvector的前面添加一个标记,也可以将它添加到查询的前面。我让这个标记不是一个真正的英语单词,以使它不太可能在字符串中被自然地找到。

select ts_rank_cd('startzz:1'::tsvector || 'foo:3A,6A,9A,12A,15,18,21,24 bar:1A,4A,7A,10A'::tsvector,
'startzz & foo:*');
0.060606062
select ts_rank_cd('startzz:1'::tsvector || 'foo:3A,6A,9A,12A,15,18,21,24 bar:1A,4A,7A,10A'::tsvector,
'startzz & bar:*');
0.18181819

当然,你也可以自己编写排序函数,使用任何你认为有意义的操作原则。

最新更新