【发布时间】:2013-07-10 05:42:00
【问题描述】:
由于我正在转向 sphinx 搜索引擎以提高我的网站性能,我正在尝试将旧的 mysql 查询翻译成新的 sphinx 语言。
重点是根据对我的帖子的投票和每次投票的得分(从 1 到 5)之间的数学运算对结果进行排序。
例如,如果我对某个帖子投了 3 票,我得到了 1=5 点投票 2=3 点和 3=2 点投票,我的表格将包含一个名为 votes 的字段,整数 = 3 (votes=3)和一个整数为 5+3+2(points=10)的字段。
因此,此类帖子的最终评分将是积分/投票,在本例中为 10/3=3,333...
假设我使用 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_SORT_EXPR -
我已经尝试过 SPH_SORT_EXPR,结果确实为零
-
它不会影响您的选择 排序如何给您 0 个结果?
-
实际上我认为我的 sphinx 配置有问题。是否可以对 sphinx 中的 sql_field_string 执行算术运算?因为如果我在文档 $id 或 @weight 上执行 SPH_SORT_EXPR 通常是有效的,但是当我尝试对任何其他字段(通常是 bigint 字段)进行任何数学运算时,它会给出 0 个结果。
标签: php full-text-search sphinx