我有一个文件名数据库,我正在尝试使用 PGs 全文搜索工具在其中进行搜索。我在文件名表上运行搜索查询,问题是排名函数没有像我希望的那样对结果进行排名。为了论证,让我们假设架构如下所示:
create table files (
id serial primary key,
filename text,
filename_ft tsvector
);
我运行的查询如下所示:
select filename, ts_rank(filename_ft, query)
from files, to_tsquery('simple', 'a|b|c') as query
where query @@ name_ft
order by rank desc limit 5;
这将返回排名最高的 5 个结果。但是,这些搜索查询来自另一个进程,并且在大多数情况下,查询中有一些“垃圾”。例如,可能会执行对“a xxxx”的查询,其中 xxxx 只是一堆其他术语。在大多数情况下,这仍然返回正确的结果,因为后缀根本不在数据库中。
但是,有时查询包含一些与排名功能无关的信息。例如,对“ab c”的查询将返回一个包含标记“b c”的文件名作为第一个结果,而与“a”完全匹配作为第二个结果,我猜这是因为第一个结果包含一个实际搜索令牌的更大百分比。
在大多数情况下(如果不是全部),最重要的标记作为查询中的第一个标记出现,所以我的问题是,有没有办法给查询中的标记赋予权重?