2

我,有表:

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

在两个字段中的狮身人面像索引: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

如何摆脱困境?

4

1 回答 1

2
  1. 狮身人面像没有 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");

[编辑] 或(从评论中添加信息)...

可以使用嵌套的 IF() 函数构建与 FIELD 相同的逻辑。可能可以使用 EXPRESSION 排序,或者只是使用 SetSelect 创建一个虚拟属性,然后按此排序(使用 EXTENDED)


[Edit2] 在sphinxQL中使用该新属性,它只是另一个排序属性ORDER BY(sphinxQL 实际上只是 SPH_SORT_EXTENDED 排序)...

SELECT * FROM index WHERE MATCH(...) ORDER BY sorter DESC, WEIGHT() DESC 

那类的东西。

于 2013-04-15T11:45:31.890 回答