我一直在为我的网站开发实时搜索功能。我取了一堆表值(即乐队、流派、专辑等),并将它们放在各自的表中,以及用于索引的搜索表中。我的主要问题是如何使它更准确。
这是我的mysql查询(注意:无论是否使用Desc,结果都是一样的):
$search = "
(SELECT * FROM `search`
WHERE `search_name` LIKE '%$search_term%'
ORDER BY '%$search_term%' DESC
LIMIT 0, 8)";
以下是数据库示例:
Search ID | Search Name | Type |
----------------------------------------------------------
8 | Big Deal (What's He Done Lately?) | Album |
12 | Henry's Funeral Shoe | Band |
问题是,当我在搜索参数中键入sayH时,我预计Henry的葬礼鞋会在顶部,但我会在它之前得到Big Deal(他最近做了什么?),因为它包含H,并且在更合适的之前搜索。
所以我的问题是:有没有MySQL函数可以对表进行排序,找到最相关的结果,并将其与不太相关的结果进行权衡
基本搜索很容易。好好搜索很难。
设置搜索时,您需要了解数据以及用户将要搜索的内容。在您的情况下,您希望以条款开头的项目首先被退回(我想)。
MySQL不是最好的搜索平台,但你可以做的是2搜索。第一种是:
search_name LIKE '$search_term%'
注意搜索词前面缺少的%。这些结果是排名较高的结果。
其次你应该使用:
search_name LIKE '%$search_term%'
这些是排名较低的结果。也在较高排名列表中的任何结果都应该从较低排名列表中删除。
最后,您应该组合结果集,确保不会意外混淆排名。
虽然这既不完美也不可调整,但在基本搜索领域可能会有所帮助。