在一个长词中查找多个单词,并按相关性对结果进行排序

时间:2015-10-29 23:15:38

标签: php mysql sql

我正在对一个数据库进行查询,该数据库在每个记录中存储一个很长的单词。没有空格,没有特殊字符,只有ualpha。现在我使用LIKE关键字来查找包含输入中所有单词的记录。我希望脚本首先向我展示具有最高相关性的结果。

因此,例如,如果"我输入"是我。此脚本应首先返回包含所有这些单词的记录,如下所示:

" XSF的 BE NSU的 ME POPKL 如果"

然后它会显示那些只包含其中两个单词的内容,然后是那些只包含其中一个单词的内容。

我尝试使用" ORDER BY CASE"并指出最佳匹配,如下所示:

 - ORDER BY CASE
 - WHEN `code` LIKE '%word1%' AND `code` LIKE '%word2%' THEN 1
 - WHEN `code` LIKE '%word1%' THEN 2
 - ELSE 3 END;

虽然有效但是当服务器超过三个字时,服务器崩溃了,因为它必须浏览几乎 400万的记录而根本无法处理它。

之后我尝试了全文搜索,但它不允许我搜索部分单词,只搜索前缀。

有没有办法实现我想要的目标?

1 个答案:

答案 0 :(得分:0)

我建议添加值。 MySQL将布尔值视为整数,因此您可以这样做:

order by ((code like '%word1%') +
          (code like '%word2%') +
          (code like '%word3%')
         ) desc

编辑:

当然,这应该在where条款之后:

where code like '%word1%' or code like '%word2%' or code like '%word3%'