3

我有一个文件名数据库,我正在尝试使用 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”完全匹配作为第二个结果,我猜这是因为第一个结果包含一个实际搜索令牌的更大百分比。

在大多数情况下(如果不是全部),最重要的标记作为查询中的第一个标记出现,所以我的问题是,有没有办法给查询中的标记赋予权重?

4

1 回答 1

1

有没有办法给查询中的标记一个权重?

就在这里。请参阅文档;搜索“重量”。

分配权重是否是正确的选择是另一回事。在我看来,您真的想从输入中排除一些数据以to_tsvector用于索引创建和搜索,因此您只是不要在索引中包含那些垃圾。

于 2013-05-12T08:17:03.890 回答