Php 在sphinx中删除重复记录而不执行setGroupBy?

Php 在sphinx中删除重复记录而不执行setGroupBy?,php,sphinx,Php,Sphinx,嘿,我是斯芬克斯搜索的新手 在我的查询中,我检索课程ID。所有课程都属于一个主题id,但其中一些课程可以属于多个主题,因此有些课程是重复的 我对我的查询设置了限制,以显示从1-20到21-40的结果。。。所以20乘20。 但有时在这20个结果中有重复的结果,因此,例如,如果从21到40有3个重复的结果,我想删除它们,然后用接下来的3个结果填充3个空格,因此查询返回21-43。然后44-64 我尝试了setGroupBy(),它成功了,但我不希望课程按课程id排序,而是使用setSortMode(

嘿,我是斯芬克斯搜索的新手

在我的查询中,我检索课程ID。所有课程都属于一个主题id,但其中一些课程可以属于多个主题,因此有些课程是重复的

我对我的查询设置了限制,以显示从1-20到21-40的结果。。。所以20乘20。 但有时在这20个结果中有重复的结果,因此,例如,如果从21到40有3个重复的结果,我想删除它们,然后用接下来的3个结果填充3个空格,因此查询返回21-43。然后44-64

我尝试了setGroupBy(),它成功了,但我不希望课程按课程id排序,而是使用setSortMode(),因此课程id再次被复制

如何删除重复记录并保持排序


任何帮助都将不胜感激。谢谢

看起来你要找的正是REMOVE_REPEATS()的功能。不确定它在编程语言客户端中是否可用。您可能需要改用SphinxQL,这是推荐的,因为客户端已经过时,并且错过了很多功能

下面是一个例子:

不带删除_REPEATS():

通过gid删除_REPEATS():


setGroupBy有第三个and选项参数,用于指定最终排序顺序

因此,可以按(例如)课程ID分组,但仍按权重(或其他)进行最终排序,而不是默认的“@group desc”

$client->setSortOrder( SPH_SORT_RELEVANCE );
$client->setGroupBy( 'course_id', SPH_GROUPBY_ATTR,  "@weight desc" );

仍然使用setSortOrder,它确定保留课程中的哪一行。Ie首先显示最高等级1,这模仿了重量的总体排序

有一个问题是
remove\u repeats
没有更新
total\u found
。而且分页也很复杂,因为table函数在resultset上运行时考虑了内部的“限制”,甚至是隐式的
LIMIT 20
。因此,需要使内部限制大于重复数据消除之前所需的行数。因此,要在final中实际获得10行,可能需要将内部限制设置为30(允许过滤20行)。
MySQL [(none)]> select remove_repeats((select * from testrt), gid, 0,10);
+------+------+
| id   | gid  |
+------+------+
|    1 |   10 |
|    3 |   20 |
|    4 |   30 |
+------+------+
3 rows in set (0.06 sec)
$client->setSortOrder( SPH_SORT_RELEVANCE );
$client->setGroupBy( 'course_id', SPH_GROUPBY_ATTR,  "@weight desc" );