我正在对一个数据库进行查询,该数据库在每个记录中存储一个非常长的单词。没有空格,没有特殊字符,只有字母。现在我正在使用LIKE关键字来查找包含我输入的所有单词的记录。我希望脚本首先向我展示具有最高相关性的结果。
例如,我输入"如果"。这个脚本应该首先返回包含所有这些单词的记录,比如:
"XSFBENSUMEPOPKLIF"
然后它会显示那些只包含其中两个单词的单词,最后显示那些只含有其中一个单词的词。
我试着使用"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万条记录,根本无法处理
之后我尝试了全文搜索,但它不允许我搜索部分单词,只能搜索前缀。
有什么方法可以实现我想要的目标吗
我建议添加这些值。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%'