0

由于我正在转向 sphinx 搜索引擎以提高我的网站性能,我正在尝试将旧的 mysql 查询翻译成新的 sphinx 语言。

关键是根据对我的帖子的投票和每次投票的分数(从 1 到 5)之间的数学运算对结果进行排序。

因此,例如,如果我对某个帖子投了 3 票,我得到了 1=5 点投票 2=3 点和 3 点=2 点投票,我的表将包含一个名为 votes 的字段,其整数 = 3 (votes=3) 和一个字段整数为 5+3+2(点数=10)。

因此,此类帖子的最终评分将是积分/投票,在此示例中为 10/3=3,333...

假设我正在使用 sphinx api 按降序获取评分最高的帖子列表,这是我在 php 脚本中使用的旧 mysql 查询:

mysql_query("SELECT * FROM table ORDER BY points/votes DESC LIMIT $start,$stop");

我试图建立一个狮身人面像查询,但它不工作并且总是给出 0 个结果。请阅读描述我所做的所有尝试的//注释行。

require("sphinxapi.php");
$cl = new SphinxClient;
$index = index;
$cl->setServer("localhost", 9312);
$cl->SetMatchMode(SPH_MATCH_FULLSCAN);
//$cl->SetSortMode(SPH_SORT_EXTENDED, 'IDIV(points,votes) DESC'); //not working
//$cl->SetSortMode(SPH_SORT_EXTENDED, '(points DIV votes) DESC'); //not working
//$cl->SetSortMode(SPH_SORT_EXTENDED, 'points/votes DESC'); //not working
//$cl->SetSortMode(SPH_SORT_EXTENDED, '(points/votes) DESC'); //not working
$cl->setLimits($start,$stop,$max_matches=1000);
$query = "";

请您帮我找出问题所在...谢谢。

4

2 回答 2

0

您将需要使用SPH_SORT_EXPR

$cl->SetSortMode(SPH_SORT_EXPR, '(points/votes) DESC');
于 2013-07-10T05:46:41.790 回答
0

首先,您需要积分和选票,而Attributes不是fields。属性存储在索引中,可用于排序等。只能对数字属性(而不是字符串)执行算术运算

正确的语法SPH_SORT_EXPR(假设你已经有了属性)是

$cl->SetSortMode(SPH_SORT_EXPR, 'points/votes');

SPH_SORT_EXPR 总是下降的,所以你最后不需要它 DESC。

但是,与其让 sphinx 每次都计算该比率,不如在计算期间更好地计算sql_query并将其存储为单个数字属性。提示:存储为整数,而不是浮点数。整数的排序效率更高。

于 2013-07-10T09:16:27.940 回答