MySQL根据关键词选择文本片段

时间:2013-02-22 15:01:14

标签: mysql

我有一个查询根据与搜索字词的相关性提取搜索结果:

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 ....代码史密斯匹配约翰 ......

等等

这怎么可能?

1 个答案:

答案 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

然后将这些变量用于外部查询中的逻辑。