gpt4 book ai didi

php - mysql/php 搜索结果的更好排序

转载 作者:行者123 更新时间:2023-11-29 08:57:27 25 4
gpt4 key购买 nike

我有一个 mysql/php 查询,它搜索数据库并根据用户输入的搜索字符串返回匹配项,它按标题升序排序,但是我们真的希望它按最佳匹配排序(类似于 ElasticSearch 用分数对搜索结果进行排名的方式)。

目前,搜索“quake II”时,结果列表如下所示:

- Quake
- Quake 4
- Quake II
- Quake III Arena

预期结果列表必须是:

- Quake II (corresponding exactly to the search)
- Quake III Arena (containing entirely the search)
- Quake
- Quake 4

当前 php/mysql 查询是:

$nameKeys = explode(" ", $gamenamethathasbeensearchedfor);
$query = "SELECT id FROM games WHERE GameTitle LIKE '%$nameKeys[0]%'";
for($i = 1; $i <= count($nameKeys); $i++)
{
if($nameKeys[$i] != "" || $nameKeys[$i] != " " || $nameKeys[$i] != " " || $nameKeys[$i] != " ")
{
$query .= " AND GameTitle LIKE '%$nameKeys[$i]%'";
}
}

最佳答案

我会在 GameTitle 上设置全文索引,然后您就可以利用 MySQL 全文排序和排序的强大功能,而无需编写一些复杂的查询。也就是说,如果您没有使用 InnoDB。你也可以做这样的事情,

SELECT id, MATCH (GameTitle) AGAINST ('%$nameKeys[$i]%') AS SCORE FROM games WHERE MATCH (GameTitle) AGAINST ('%$nameKeys[$i]%') limit 10;

这应该让您非常接近,而无需修改索引,但我建议您查看 MySQL Full-text functions

关于php - mysql/php 搜索结果的更好排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9593293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com