PostgreSQL的全文搜索
问题描述:
我在这我想使用的PG全文搜索功能来搜索文件名的数据库。我正在一个文件名表上运行搜索查询,问题是排名函数没有按照我希望的那样对结果进行排名。为了讨论的方便,我们假设该架构是这样的:PostgreSQL的全文搜索
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'的查询,其中xxxxx只是其他一些术语。在大多数情况下,这仍会返回正确的结果,因为后缀根本不在数据库中。
然而,有时一个查询中包含一些无关的信息,与分级功能螺丝。例如,对'abc'的查询将返回一个包含令牌'bc'作为第一个结果的文件名,并将'a'的精确匹配作为第二个结果,我猜这是由于第一个结果包含更大实际搜索令牌的百分比。
在大多数情况下(如果不是全部)的最重要的标志出现在查询中的第一个标记,所以我的问题是,有没有办法让在查询中表征的加权?
答
有没有办法让在查询中表征的加权?
是的,有。见the documentation;搜索“体重”。
分配权重是否是正确的选择是另一回事。在我看来,你真的想在索引创建和搜索中排除输入中的一些数据到to_tsvector
,所以你不要在索引中包含那些垃圾。
据我了解,文档,你可以分配权重中的tsvector以语意,但我无法找到有关的查询符号分配权重东西。无关的数据不在tsvectors中,它在查询中提供。 – Blubber 2013-05-12 09:08:10