Php 斯芬克斯自定义排序(字段)
一、 有表格:Php 斯芬克斯自定义排序(字段),php,search,full-text-search,sphinx,Php,Search,Full Text Search,Sphinx,一、 有表格: id | geo_id | values .... 1 1 wvrevev 2 2 wvrevev 3 3 wvrevev 3 4 wvrevev 7 5 wvrevev 8 6 wvrevev 9 8 wvrevev 在sphinx索引的两个字段中:id和geo_id 我需要某种类型的,那应该是我指定记录的顶部。在SQL中,接收到这样的请
id | geo_id | values ....
1 1 wvrevev
2 2 wvrevev
3 3 wvrevev
3 4 wvrevev
7 5 wvrevev
8 6 wvrevev
9 8 wvrevev
在sphinx索引的两个字段中:id和geo_id
我需要某种类型的,那应该是我指定记录的顶部。在SQL中,接收到这样的请求:
SELECT * FROM table ORDER BY FIELD(geo_id, "2", "3", "6") DESC
如何在Sphinx中指定排序?
此条目:
$cl->SetSortMode(SPH_SORT_EXTENDED, "FIELD(geo_id, "2", "3", "6") DESC");
抛出一个错误:
enter code hereindex sphinxoffers: sort-by attribute 'field' not found
如何摆脱这种局面
sql_query = SELECT id, geo_id, FIELD(geo_id, "2", "3", "6") AS sorter, ....
然后在sphinxAPI代码中
$cl->SetSortMode(SPH_SORT_EXTENDED, "sorter DESC");
[编辑]或(从评论中添加信息)
可以从嵌套的IF()函数中构建与字段相同的逻辑。可以使用表达式排序,或者只使用SetSelect创建一个虚拟属性,并按该属性排序(使用扩展)
[Edit2]要使用该新属性,在sphinxQL中,它只是在
ORDER BY
中使用的另一个排序属性(sphinxQL实际上只是SPH_SORT_扩展排序)
有点像 如果我有这个属性是动态的,那么与辅助SetSelect有关的东西是不可能的吗?是可能的,但是因为没有FIELD()函数,所以必须用if()函数构造逻辑。谢谢!成功了。对不起,我还不能把评级!如何使用pdo/mysql语法实现同样的功能?
SELECT * FROM index WHERE MATCH(...) ORDER BY sorter DESC, WEIGHT() DESC