我,有 table :
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_EXTENDED 模式下指定函数。有排序表达式,但由于 1 而无济于事。
如果您始终使用该列表,只需在索引时将其创建为属性...
sql_query = SELECT id, geo_id, FIELD(geo_id, "2", "3", "6") AS sorter, ....
然后在sphinxAPI代码中...
$cl->SetSortMode(SPH_SORT_EXTENDED, "sorter DESC");
[编辑]或(从评论中添加信息)...
Can build the same logic as FIELD out of nested IF() functions. Can probaly use EXPRESSION sorting, or just create a virtual attribute with SetSelect, and sort by that (using EXTENDED)
[Edit2]要在sphinxQL中使用该新属性,它只是ORDER BY
中使用的另一个排序属性(sphinxQL实际上只是SPH_SORT_EXTENDED排序)...
SELECT * FROM index WHERE MATCH(...) ORDER BY sorter DESC, WEIGHT() DESC
诸如此类的事情。
关于php - Sphinx自定义排序(FIELD),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16013809/