sphinx搜索查询首先按标题WEIGHT排序20,然后按标题ASC排序20,没有重复输出

时间:2017-03-16 04:08:32

标签: mysql sql sphinx

如何在sphinx上通过sql命令选择第一个前20行按标题WEIGHT排序,然后在同一个sql命令中按标题ASC(总共40个结果)排序,但不要给出重复的标题输出。

我尝试这个sql命令,但所有标题结果都是通过WEIGHT()

的顺序
$sql = "SELECT *,MAX(WEIGHT()) AS tpw FROM vids_tab 
 WHERE MATCH('@title " . mysql_real_escape_string( 'fun | funny | today funny' ) . "') 
 GROUP 5 BY title ORDER BY tpw DESC, title ASC LIMIT 40 OPTION max_matches=40";

1 个答案:

答案 0 :(得分:0)

说实话,在单个查询中并没有真正看到这是实用的。只需发出两个查询。然后删除应用程序中的任何重复项。

在第二个确保结果数量增加一倍,所以即使需要删除20个重复项,仍然会有20个。

如果确实需要一个命令,那么就认为需要一个UDF。在特定问题上,需要知道前20个结果的权重范围(因此可以创建一个虚拟列进行排序(即知道行是否在前20个结果中)

... ORDER BY IF(WEIGHT() BETWEEN topweight AND bottomweight, WEIGHT(), 0 ) DESC , title ASC

(ISN'一个有效的sphinxQL命令,只是展示了需要模拟的内容)所以前20个按重量排序,非第一个会得到相同的值,然后按标题排序。