我需要一些帮助。 网站有2种排序类型:按相关性和日期。 有时发生最高分的问题是旧的,最新的分数很小。 因此需要基于2个标记的一些常见查询。
Relecancy查询看起来像'ORDER BY' ts_rank(EXTENDED_INDEX, custom_tsquery('english', 'test', 0))'
和第二个只是'ORDER BY table.date'
有任何想法如何改进搜索?也许是日期的第二次ts_rank?
答案 0 :(得分:2)
基于这个问题,目前还不清楚您使用的是什么数据集作为示例,但您基本上可以在查询中使用ORDER BY rank DESC,date DESC
,因此您将拥有最“最近”和高度“排名”的数据。结果集。
WITH t(id,t,d) AS ( VALUES
(1,to_tsvector('english','one'),'2016-03-18'::DATE),
(2,to_tsvector('english','two words'),'2016-03-17'::DATE),
(3,to_tsvector('english','three words we are looking for'),'2016-03-16'::DATE),
(4,to_tsvector('english','four words goes here'),'2016-03-15'::DATE)
)
SELECT
id,
ts_rank(t,q) AS rank,
d
FROM t,to_tsquery('english','three | words') AS q
ORDER BY rank DESC NULLS LAST,d DESC;
结果:
id | rank | d
----+-----------+------------
3 | 0.0607927 | 2016-03-16
2 | 0.0303964 | 2016-03-17
4 | 0.0303964 | 2016-03-15
1 | 0 | 2016-03-18
(4 rows)