按属性存在在SphinxSearch中排序

时间:2015-02-22 20:34:17

标签: sorting sphinx

简介

我有不寻常的Sphinx需求,我只根据group ASC, rating DESC的属性对结果(用户)进行排序,当然还有一些过滤器,例如interests

在SQL关系中,用户n感兴趣。 在sphinx中,兴趣是具有整数的多属性。

所有过滤和排序都很有效,但我需要做一些升级:

问题

用户可以有标准兴趣,但现在他也可以拥有主要兴趣,这是通过标志bool is_main在数据库中标记的。

现在我需要修改从上层到用户的排序,主要感兴趣的是具有标准兴趣的用户。

可视化示例: *过滤是sport兴趣。

结果应该根据运动兴趣进行过滤 - 这很容易,但是 如何使用属性sport=main创建结果

我明显的解决方案是使用additinal filter main_interest生成2个查询,使用第二个false和合并结果,但它似乎并不完美。

1 个答案:

答案 0 :(得分:0)

您可以创建一个虚拟属性,即条件的结果,类似于

$cl->setSelect("*,IF(attrib=34,1,0) as mysort");
or
$sphinxql = "SELECT *,IF(attrib=34,1,0) as mysort FROM myindex ...";

然后可以setSortOrder

进行ORDER BYmysort DESC, ...

目前尚不清楚用户是否只能拥有一个' main'兴趣 - 在这种情况下,你可以坚持标量属性。或多个,在这种情况下需要另一个MVA。因此,您可以拥有一个具有所有兴趣(用于过滤)的MVA和另一个仅具有主要兴趣(用于排序)的MVA

相关问题