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

How to Make a More Accurate Live Search in PHP

我一直在为我的网站开发实时搜索功能。我取了一堆 table 值(即乐队、流派、专辑等),并将它们放入各自的 table 中,以及搜索 table 以进行索引。我的主要问题是如何让它更准确。

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

问题是,当我在搜索参数中输入 say H 时,我希望 Henry's Funeral Shoe 位于顶部,但我在它之前得到 Big Deal (What's He Done Lately?),因为它包含 H 并且在更合适的之前搜索它。

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

基本搜索很简单。好的搜索很难。

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

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

search_name LIKE '$search_term%'

注意搜索词前面缺失的 %。这些结果是排名较高的结果。

其次你应该使用:

search_name LIKE '%$search_term%'

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

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

虽然不完美也不可调,但可能有助于基本搜索字段。