简介
我有不寻常的Sphinx需求,我只根据group ASC, rating DESC
的属性对结果(用户)进行排序,当然还有一些过滤器,例如interests
。
在SQL关系中,用户n
感兴趣。
在sphinx中,兴趣是具有整数的多属性。
所有过滤和排序都很有效,但我需要做一些升级:
问题
用户可以有标准兴趣,但现在他也可以拥有主要兴趣,这是通过标志bool is_main
在数据库中标记的。
现在我需要修改从上层到用户的排序,主要感兴趣的是具有标准兴趣的用户。
可视化示例:
*过滤是sport
兴趣。
结果应该根据运动兴趣进行过滤 - 这很容易,但是
如何使用属性sport=main
创建结果?
我明显的解决方案是使用additinal filter main_interest
生成2个查询,使用第二个false和合并结果,但它似乎并不完美。
答案 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 BY
或mysort DESC, ...
目前尚不清楚用户是否只能拥有一个' main'兴趣 - 在这种情况下,你可以坚持标量属性。或多个,在这种情况下需要另一个MVA。因此,您可以拥有一个具有所有兴趣(用于过滤)的MVA和另一个仅具有主要兴趣(用于排序)的MVA