我在网站上使用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
答案 0 :(得分:4)
我找到了一种使用@mobius'SetSortMode
示例的变体来实现此目的的方法。
我没有使用SPH_SORT_EXTENDED
,而是使用SPH_SORT_EXPR
以及下面的表达式:
$cl->SetSortMode ( SPH_SORT_EXPR,
" @weight + ( -1000000000/(" . time() . " - course_date_ts)) ");
这使我能够对即将到来的结果进行更高的权衡,然后将结果略微降低,最后将结果保持不变。
分子中的大数字与UNIX时间戳中的小数位数相对应。
答案 1 :(得分:1)
在您的sphinx.conf中,您应该在选择查询中将日期指定为时间戳:
SELECT entry_id, title, UNIX_TIMESTAMP(date) as date_timestamp FROM Table;
并指定date_timestamp列的类型为timestamp:
sql_attr_timestamp = date_timestamp
现在,您可以按时间戳列对结果进行排序。检查Sphinx手册http://sphinxsearch.com/docs/current.html#sorting-modes
的排序部分即在PHP中:
$search->SetSortMode( SPH_SORT_EXTENDED, '@weight DESC, date_timestamp ASC );