我正在使用sphinx 201 beta(r2792)
我有rt_attr_uint = rake的rt索引我的目标是按此属性对结果进行排序 使用
按预期工作$this->sphinx->SetSortMode(SPH_SORT_EXTENDED, 'rake DESC')
但我想随机化这个结果......让我说我有这个数据
(id, title, rake)
1, 'test', 3
2, 'test2', 3
3, 'ásdf', 1
4, 'rreer', 0
所以在我追加随机
之后$this->sphinx->SetSortMode(SPH_SORT_EXTENDED, 'rake DESC, @random')
我希望随机化结果按属性rake降序排序 但我得到错误:
sort-by attribute '@random' not found
我不明白,因为这个随机属性是内部属性 难道我做错了什么?哪里可能有问题?感谢
答案 0 :(得分:2)
我所做的是在SQL查询上创建随机数
SELECT ... RAND() as random_sort, ...
将其添加为属性
sql_attr_float = random_sort
然后在扩展排序查询中使用它
$this->sphinx->SetSortMode(SPH_SORT_EXTENDED, 'rake DESC, random_sort DESC');
答案 1 :(得分:1)
从我的快速测试中,看起来Sphinx只支持@random,如果它是sort子句中的唯一属性。所以我担心你运气不好 - 要么只是随机排序,要么只是按照rake排序。
答案 2 :(得分:0)
对于实时随机性,索引id并使用expr模式对这样的表达式进行排序(不确定这个是100%随机):
( ( ( id % #{pagesize} + #{rand(pagesize * 2)} ) % #{pagesize} ) / #{pagesize} )
在上面的表达式中添加一个If语句以使用rake属性。
[http://sphinxsearch.com/docs/1.10/sorting-modes.html] [1]