我正在尝试在三个字段标题,作者和文字上创建关键字搜索。我希望它们按相关性排序,因此我在任何字段中给出一个匹配点。我还有一个名为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
谢谢。
答案 0 :(得分:2)
是的,有更好的方法可以进行关键字搜索。
您正在使用的方法将强制执行 table-scan ,这意味着它必须读取表中的每一行。根据您表中最终会有多少数据,这比使用专门的全文索引方法要慢几百或几千倍。
查看我的演示文稿Full Text Search Throwdown,其中包含不同解决方案的比较。包括:
答案 1 :(得分:1)