在Sphinx
中,我想搜索包含某些关键字的行,并按特定顺序对其进行排序。
例如,搜索“' Dog',' Cat'' Lion'并按顺序排序,以便排出“狗”字样。将首先列出,然后是' Cat',然后是' Lion'。
在Sphinx
中,使用以下查询即可轻松搜索:
SELECT * FROM test_index WHERE MATCH('test_string "DOG" | "CAT" | "Lion"')
我们如何在Sphinx
?
答案 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_EXTENDED
。 PHP
中的示例如下:
$sph->SetSortMode(SPH_SORT_EXTENDED, "DOG, CAT, Lion");
示例:
Article.search "term", :sort_mode => :extended,
:order => "Project ASC, Company ASC"
答案 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')
(为简洁起见删除了引号)