Php 字段之间的sphinx搜索数学运算

Php 字段之间的sphinx搜索数学运算,php,full-text-search,sphinx,Php,Full Text Search,Sphinx,由于我正在使用sphinx搜索引擎来提高我的ebsite性能,我正在尝试将旧的mysql查询转换为新的sphinx语言 重点是根据对我帖子的投票和每次投票的分数(从1到5)之间的数学运算对结果进行排序 因此,例如,如果我对一篇文章投了3票,并且我投了1=5分,投了2=3分,投了3=2分,那么我的表将包含一个名为“投票”的字段,该字段的整数为3(投票数为3),该字段的整数为5+3+2(点数为10) 因此,此类职位的最终评分将为分数/选票,在本例中,分数为10/3=3333 假设我正在使用sphin

由于我正在使用sphinx搜索引擎来提高我的ebsite性能,我正在尝试将旧的mysql查询转换为新的sphinx语言

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

因此,例如,如果我对一篇文章投了3票,并且我投了1=5分,投了2=3分,投了3=2分,那么我的表将包含一个名为“投票”的字段,该字段的整数为3(投票数为3),该字段的整数为5+3+2(点数为10)

因此,此类职位的最终评分将为分数/选票,在本例中,分数为10/3=3333

假设我正在使用sphinx api以降序获得排名靠前的帖子列表,这是我在php脚本中使用的旧mysql查询:

mysql_query("SELECT * FROM table ORDER BY points/votes DESC LIMIT $start,$stop");
我试图构建一个sphinx查询,但它不起作用,总是给出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 = "";

你能帮我找出哪里不对劲吗。。。谢谢。

您需要使用
SPH\u SORT\u EXPR

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

首先,您需要点和投票成为
属性
,而不是
字段
。属性存储在索引中,可用于排序等。算术只能对数值属性(而不是字符串)执行

SPH\u SORT\u EXPR
的正确语法是

SPH_SORT_EXPR总是递减的,所以您不需要在末尾进行描述


但与其让sphinx每次都计算该比率,不如在
sql\u查询过程中更好地进行计算,并将其存储为单个数字属性。提示:存储为整数,而不是浮点。整数的排序效率更高

您需要使用
SPH_SORT_EXPR
来使用算术表达式我已经尝试过SPH_SORT_EXPR,但我得到的结果为零。编辑不影响您的选择排序如何给您提供0个结果?实际上,我认为我的sphinx配置中存在许多错误。可以对sphinx中的sql字段字符串执行算术运算吗?因为如果我对文档$id或@weight执行SPH_SORT_EXPR,通常是有效的,但是当我尝试对任何其他字段(通常是bigint字段)执行任何数学操作时,它会给出0个结果。
$cl->SetSortMode(SPH_SORT_EXPR, 'points/votes');