【发布时间】:2015-08-08 17:20:15
【问题描述】:
我有一个带有商店数据库的网站。我网站的访问者可以按名称搜索商店,目前 SQL 查询是这样完成的:
SELECT *
FROM tbl_shop
WHERE LOWER(`name`) LIKE LOWER(`%text1%`)
OR LOWER(`name`) LIKE LOWER(`%text2%`)
.....
OR LOWER(`name`) LIKE LOWER(`%textN%`)
这很好用,但问题是,结果不是按最佳匹配排序的。一些商店名称包含非常常见的单词(例如“Na Lavce”),如果您输入此字符串,所有包含“%na%”(很多)的沙龙都会显示为结果。
因此,访问者可以获得许多结果,但有时无法找到他正在寻找的内容,因为正确的结果例如在第 5 个结果页上。任何想法如何解决这个问题?
【问题讨论】:
-
您可以轻松地按匹配数对它们进行排名,还可以为术语的顺序分配偏好。但是你怎么知道哪个更好呢?
-
您还可以设置常用词列表并避免搜索这些词,但这需要一些预处理。
-
很多常用词也是较短的词。您可以以某种方式按搜索词的长度进行排名,但我一开始并没有这么说,因为我不确定它是否可靠。
-
大多数数据库都支持
fulltext匹配,这听起来像你想要实现的 -
为什么不使用下拉菜单(具有自动选择功能)来限制用户列表?