Mysql php关键字搜索

时间:2012-11-22 22:23:13

标签: mysql

我正在尝试在三个字段标题,作者和文字上创建关键字搜索。我希望它们按相关性排序,因此我在任何字段中给出一个匹配点。我还有一个名为tags的表,它在每一行中存储一个故事的特定标记。如果标记上存在匹配项,我会将相关性添加到标记的使用次数。当用户输入搜索时,他可以输入一系列关键字。我正在考虑爆炸字符串并使用for循环为每个关键字添加下面的select语句中的代码。 这看起来相当复杂,所以我想知道是否有更好的方法来做到这一点?

select text, ((case when S.sid in (select sid from tags where tahname like 'db') 
           then (select uses from tags T where S.sid = T.sid and tagname like 'db') +
              (case when title like '%db%' then 1 else 0 end) +
              (case when author like '%db%' then 1 else 0 end) +
              (case when text like '%db%' then 1 else 0 end)) as relevance

from stories S
order by relevance desc

谢谢。

2 个答案:

答案 0 :(得分:2)

是的,有更好的方法可以进行关键字搜索。

您正在使用的方法将强制执行 table-scan ,这意味着它必须读取表中的每一行。根据您表中最终会有多少数据,这比使用专门的全文索引方法要慢几百或几千倍。

查看我的演示文稿Full Text Search Throwdown,其中包含不同解决方案的比较。包括:

答案 1 :(得分:1)

您可以使用mysql的全文搜索功能

http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

甚至更好地使用为搜索开发的内容

http://sphinxsearch.com/