我有一个查询根据与搜索字词的相关性提取搜索结果:
SELECT *,
( (1.3 * (MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE))) + (0.6 * (MATCH(txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE)))) AS relevance
FROM content
WHERE (MATCH(strTitle,txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE) )
ORDER BY relevance DESC
我还希望能够从描述中提取搜索匹配的第一个实例。因此,如果搜索“john smith”,我希望我的结果显示如下:
页面标题1 ...代码片段匹配约翰史密斯 ...
页面标题2 ...代码段约翰匹配....
页面标题3 ....代码史密斯匹配约翰 ......
等等
这怎么可能?
答案 0 :(得分:1)
您可以使用案例陈述来执行此操作:
select *,
( (1.3 * (MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE))) + (0.6 * (MATCH(txtContent) AGAINST ('+john+smith' IN BOOLEAN MODE)))) AS relevance,
(case when MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE)) > 0
then 'snippet matching +john+smith'
. . .
end)
就个人而言,我会将匹配作为单独的变量放在子查询中:
select
from (select t.*,
MATCH(strTitle) AGAINST ('+john+smith' IN BOOLEAN MODE)) as match_join_smith,
. . .
from t
) t
然后将这些变量用于外部查询中的逻辑。