Php 在sphinx中删除重复记录而不执行setGroupBy?
嘿,我是斯芬克斯搜索的新手 在我的查询中,我检索课程ID。所有课程都属于一个主题id,但其中一些课程可以属于多个主题,因此有些课程是重复的 我对我的查询设置了限制,以显示从1-20到21-40的结果。。。所以20乘20。 但有时在这20个结果中有重复的结果,因此,例如,如果从21到40有3个重复的结果,我想删除它们,然后用接下来的3个结果填充3个空格,因此查询返回21-43。然后44-64 我尝试了setGroupBy(),它成功了,但我不希望课程按课程id排序,而是使用setSortMode(),因此课程id再次被复制 如何删除重复记录并保持排序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(
任何帮助都将不胜感激。谢谢看起来你要找的正是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" );