如何通过搜索查询改进订单? PostgreSQL的

时间:2016-03-18 15:52:10

标签: postgresql full-text-search sql-order-by psql tsvector

我需要一些帮助。 网站有2种排序类型:按相关性和日期。 有时发生最高分的问题是旧的,最新的分数很小。 因此需要基于2个标记的一些常见查询。

Relecancy查询看起来像'ORDER BY' ts_rank(EXTENDED_INDEX, custom_tsquery('english', 'test', 0))'

和第二个只是'ORDER BY table.date'

有任何想法如何改进搜索?也许是日期的第二次ts_rank?

1 个答案:

答案 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)