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
如何摆脱这种局面

  • Sphinx没有FIELD()函数
  • 不能在“排序\扩展”模式下指定函数。有Sort表达式,但由于1而无效 如果您总是使用该列表,则可以在索引时将其创建为属性

    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