我在這我想使用的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'的精確匹配作爲第二個結果,我猜這是由於第一個結果包含更大實際搜索令牌的百分比。
在大多數情況下(如果不是全部)的最重要的標誌出現在查詢中的第一個標記,所以我的問題是,有沒有辦法讓在查詢中表徵的加權?
據我瞭解,文檔,你可以分配權重中的tsvector以語意,但我無法找到有關的查詢符號分配權重東西。無關的數據不在tsvectors中,它在查詢中提供。 – Blubber 2013-05-12 09:08:10