2015-02-11 51 views
-1

我一直在为我的网站开展实时搜索功能。我收集了一些表值(即乐队,流派,专辑等),并将它们放在它们各自的表格中,以及用于索引的搜索表格。我的主要问题是如何让它更准确。如何在PHP中进行更精确的实时搜索

这是我的MySQL查询(注意:结果是相同的有或没有说明):

$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进入搜索参数时,我预计亨利的殡葬鞋将在顶部,但相反我得到大交易(他最近做了什么?)之前,因为它包含H,并且在更合适的之前进行搜索。

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

回答

1

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

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

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

search_name LIKE '$search_term%' 

请注意在搜索项前缺少的%。这些结果是排名较高的结果。

其次,你应该使用:

search_name LIKE '%$search_term%' 

这些是你的排名较低的结果。任何也位于较高级别列表中的结果都应该从排名较低的列表中删除。

最后,你应该结合结果集,确保不会偶然混淆行列。

虽然不完美也无法调整,但这可能有助于在基本搜索领域。

+0

谢谢,这导致我'GROUP BY search_name',然后'ORDER BY CASE'使用你的建议。 – 2015-02-11 01:23:36