在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_EXTENDED
。PHP
中的示例如下:
$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')
(为简洁起见,去掉了引号)