2016-03-18 18 views
0

Мне нужна помощь. сайт имеет 2 типа сортировки: по релевантности и дате. Иногда случается, что проблемы с самым высоким балом до старости, а у самого нового - небольшая оценка. Так что нужен общий запрос на основе двух меток.как улучшить порядок в поисковом запросе? PostgreSQL

Relecancy запрос выглядит 'ORDER BY' ts_rank(EXTENDED_INDEX, custom_tsquery('english', 'test', 0))'

и второй раз 'ORDER BY table.date'

ли какие-либо идеи, как улучшить поиск? Может быть, какой-то второй ts_rank по дате?

ответ

0

Исходя из вопроса, непонятно, какой набор данных вы используете в качестве примера, но вы можете в основном использовать 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) 
+0

спасибо за ваш ответ, но нам нужно большее влияние на сегодняшний день, поэтому решили выбрать такой вариант ** ORDER BY ts_rank()^2/абс (date_difference + 0.5) ** , где date_difference - количество дней между сегодняшним днем ​​и по дате (может быть, это поможет кому-то) –