Sphinx - 按特定顺序排序结果

时间:2016-04-06 12:18:28

标签: php sphinx

Sphinx中,我想搜索包含某些关键字的行,并按特定顺序对其进行排序。

例如,搜索“' Dog',' Cat'' Lion'并按顺序排序,以便排出“狗”字样。将首先列出,然后是' Cat',然后是' Lion'。

Sphinx中,使用以下查询即可轻松搜索:

SELECT * FROM test_index WHERE MATCH('test_string "DOG" | "CAT" | "Lion"')

我们如何在Sphinx

中按预定顺序对行进行排序

2 个答案:

答案 0 :(得分:2)

您可以使用SQL中的预定义列表进行订购。

完成SQL:

SELECT * 
FROM   test_index 
WHERE  MATCH('test_string "DOG" | "CAT" | "Lion"') 
ORDER  BY CASE 
            WHEN field = 'DOG' THEN 0 
            WHEN field = 'CAT' THEN 1 
            WHEN field = 'Lion' THEN 2 
          end 

是的,Sphinx不支持ORDER BY CASE。如果您想以预定义的顺序缩短,可以使用SPH_SORT_EXTENDEDPHP中的示例如下:

$sph->SetSortMode(SPH_SORT_EXTENDED, "DOG, CAT, Lion");

示例:

Article.search "term", :sort_mode => :extended,
  :order => "Project ASC, Company ASC"

Source in detail

答案 1 :(得分:1)

你可以做点什么

WHERE MATCH('test_string DOG | DOG | DOG | CAT | CAT | Lion')

这意味着某些单词会多次匹配。 MIgh需要结合不同的排名现象,例如OPTION ranker=wordcount

Boost操作员也可以做类似的事情......

WHERE MATCH('test_string DOG^3 | CAT^2 | Lion')

(为简洁起见删除了引号)