狮身人面像-按特定顺序排序


Sphinx - Sort results in a specific order

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

例如,搜索单词"Dog"、"Cat"、"Lion",并按顺序排序,使带有"Dog’的行将首先列出,然后是带有"Cat"的行,然后是带"Lion’的行。

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

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

我们如何在Sphinx中按预定义的顺序对行进行排序?

您可以在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 

是的,斯芬克斯不支持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"

源详细信息

YOu可以做一些类似的事情

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

这意味着某些单词将匹配多次。MIgh需要与不同的排名模式相结合,例如OPTION ranker=wordcount


Boost操作员也可能做类似的事情。。。

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

(为简洁起见,去掉了引号)