最佳关键字搜索技术

时间:2015-07-13 14:19:18

标签: php mysql keyword

我有一个包含名为title的列的表。

以字符串的形式从用户获取输入。该字符串实际上是由空格分隔的一组关键字。

我想在整个表中搜索记录,其标题字段包含用户输入的字符串中存在的一些关键字,结果需要按匹配顺序显示。

对于Ex:

RecordA -> title -> "apple mango grapes banana"
RecordB -> title -> "apple lemon orange"
RecordC -> title -> "banana"
RecordD -> title -> "lemon mango grapes"

假设用户输入的字符串是:“apple mango orange” 然后我想按顺序从php页面得到结果

Record A  // 2 matches
Record B  // 2 matches
Record D  // 1 match
Record C  // 0 match

建议我在php中执行此操作的有效方法..

注意:数据库在Mysql中。无法修改它以将全文搜索索引添加到表中。

1 个答案:

答案 0 :(得分:1)

最好的方法是全文搜索(参见here)。这个正确的方式来做你想做的事情,到目前为止效率最高。

在没有全文搜索的情况下你可以做的是这样的:

select t.*
from table t
where title like '%word1%' or
      title like '%word2%' or
      . . .
order by ((title like '%word1%') +
          (title like '%word2%') +
          . . .
         ) desc;

您必须解析用户提供的单词以获取每个单词。另请注意,您的单词边界有问题。如上所述,即使在一个单词中,也会发现任何字母串的出现。如果这是一个问题,那么使用正则表达式而不是like。但是,真正的解决方案是全文搜索。