Взвешивание результатов Сфинкса по дате - PullRequest
0 голосов
/ 10 февраля 2012

Я использую Sphinx Search на веб-сайте для отслеживания различных записей в таблице.Эти записи содержат компонент даты и становятся менее релевантными после передачи их данных.

Как Sphinx может назначить больший вес результатам, которые соответствуют критериям поиска (например, поиск по ключевым словам), а затем назначить меньший вес темрезультаты, которые имеют дату в прошлом, но все еще соответствуют критериям поиска?Приведенная ниже иллюстрация должна помочь передать мои потребности:

Таблица, содержащая данные для поиска:

--------- ------------------ ---------
entry_id | title            | date    |
--------- ------------------ ---------
1         Tennis Racquet     12-10-2010
2         Basketball         03-24-2011
3         Tennis             03-03-2012
4         Skydiving          09-16-2012
5         Fishing            11-27-2012
6         Tennis Court       02-09-2013

Условие поиска:

tennis

Результаты поиска:

  1. Вступление 3 - Теннис
  2. Вступление 6 - Теннисный корт
  3. Вступление 1 - Теннисная ракетка - Возвращается последним, поскольку дата этой записи предшествует сегодняшней дате (2-9-2012), но он по-прежнему соответствует поисковому запросу

Ответы [ 2 ]

4 голосов
/ 10 февраля 2012

Я нашел способ сделать это с помощью варианта @mobius 'SetSortMode.

Вместо использования SPH_SORT_EXTENDED я использовал SPH_SORT_EXPR вместе с выражением ниже:

$cl->SetSortMode ( SPH_SORT_EXPR, 
        " @weight + ( -1000000000/(" . time() . " - course_date_ts)) ");

Это позволяет мне взвешивать предстоящие результаты выше, затем будущие результаты немного ниже и, наконец,старые результаты сохраняются.

Большое число в числителе должно соответствовать количеству десятичных знаков в метке времени UNIX.

1 голос
/ 10 февраля 2012

В вашем sphinx.conf вы должны указать дату в качестве временной метки в вашем запросе на выборку следующим образом:

SELECT entry_id, title, UNIX_TIMESTAMP(date) as date_timestamp FROM Table;

и укажите, что столбец date_timestamp имеет тип timestamp:

sql_attr_timestamp = date_timestamp

Теперь вы можете сортировать результаты по столбцу отметки времени. Ознакомьтесь с разделом «Сортировка» в руководстве Сфинкса http://sphinxsearch.com/docs/current.html#sorting-modes

т.е. в PHP:

$search->SetSortMode( SPH_SORT_EXTENDED, '@weight DESC, date_timestamp ASC );
...