php - Sphinx自定义排序(FIELD)

标签 php search full-text-search sphinx

我,有 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

如何摆脱困境?

最佳答案

  1. Sphinx 没有 FIELD() 函数
  2. 您无法在 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/

相关文章:

php - Drupal 屏蔽电子邮件地址并替换为图片

php - 内联 PHP/HTML 三元 If

ios - 从 iOS 应用程序在服务器上实现动态搜索的最佳方式是什么?

windows - 使用 Windows 搜索以 jsp 结尾的文件

php - 'Plus' 关键字不适用于 mysql 全文搜索

php - mysql多表查询返回排序结果发送查看之前

c - 内循环的运行时间是多少?

php - 知道网站如何在其标题/网址中动态捕获谷歌搜索关键字吗?

postgresql - 搜索字符串中的单个单词

php - 使用 Eloquent 的 Laravel block 方法