如何在PHP中进行更准确的实时搜索

时间:2015-02-11 00:51:48

标签: php mysql livesearch

我一直在为我的网站开发实时搜索功能。我拿了一堆表值(即乐队,流派,专辑等),然后将它们放在各自的表格中,以及用于索引的搜索表格。我的主要问题是如何使其更准确。

这是我的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   |

问题是,当我在搜索参数中输入 H 时,我希望 Henry's Funeral Shoe 位于顶部,而是我得到大不了(他最近做了什么?)之前,因为它包含H并且在更合适的之前进行搜索。

所以我的问题:是否有一个MySQL函数可以对表进行排序并找到最相关的结果,并将它们与那些不太相关的结果进行权衡?

1 个答案:

答案 0 :(得分:1)

基本搜索很容易。好搜索很难。

设置搜索时,您需要了解数据以及用户要搜索的内容。在您的情况下,您希望首先返回以条款开头的项目(我假设)。

MySQL通常不是搜索的最佳平台,但你可以做的是2搜索。第一个是:

search_name LIKE '$search_term%'

请注意搜索字词前面缺少的%。这些结果排名较高。

其次你应该使用:

search_name LIKE '%$search_term%'

这些是排名较低的结果。任何也在较高等级列表中的结果都应从排名较低的列表中删除。

最后你应该结合结果集,确保不要意外混淆排名。

虽然不完美也不可调,但这可能对基本搜索领域有所帮助。