如何使用 MySQL 进行最相关的搜索?
How to make the most relevant search with MySQL?
我想根据与 MySQL 的相关性进行搜索。无论我尝试什么,我都无法成功。我做了全文搜索,我用 Like 搜索了,同样我不能执行以下顺序。
搜索词例如:“第一秒”
First Second
关键字 -> (全词)将以
开头
关键字 First Second
关键字 -> (全词)在中间或末尾
Firstsecond
关键字 -> (相邻词)将以
开头
关键字 Firstsecond
关键字 -> (相邻词)在中间或末尾
First
关键字 -> (只有第一个词)将以
开头
关键字First
关键字-> (只有第一个词)在中间或末尾
Second
关键词 -> (只有第二个词)会以
开头
关键字Second
关键字-> (只有第二个字)中间或末尾
然后我要它继续如下; (全部)
第一个asdasd关键字
关键字 asdasdfirst 关键字
关键字 asdasdfirstasdasd 关键字
第二个asdasd关键字
关键字 asdasdsecond 关键字
关键字asdasdsecondasdasd关键字
是的,FULLTEXT 不会进行这种搜索。这是 word-oriented。
你想要的并不简单SQL。我想你想要这样的东西来打第一个关键词。
SET @match := 'first'
SELECT MIN(priority) priority, value
FROM (
SELECT 1 priority, value FROM tbl WHERE value LIKE CONCAT(@match, ' %')
UNION ALL
SELECT 2 priority, value FROM tbl WHERE value LIKE CONCAT('% ', @match, ' %')
UNION ALL
SELECT 3 priority, value FROM tbl WHERE value LIKE CONCAT('%', @match, '%')
) results
GROUP BY value
ORDER BY MIN(priority), value;
通常,您使用 UNIONed 系列的 SELECT,并为 full-word 和嵌入的单词匹配设置优先级,并为每一行采用优先级最低的匹配项。
您需要详细说明处理这两个关键字的一般模式。这看起来可能会变成 xxx 脖子上的真正疼痛才能正确。 LIKE '%something'
搜索词意味着它不会很快。
如果您要大规模使用它,可能值得研究 Sphinx。
我想根据与 MySQL 的相关性进行搜索。无论我尝试什么,我都无法成功。我做了全文搜索,我用 Like 搜索了,同样我不能执行以下顺序。
搜索词例如:“第一秒”
First Second
关键字 -> (全词)将以
开头
关键字 First Second
关键字 -> (全词)在中间或末尾
Firstsecond
关键字 -> (相邻词)将以
开头
关键字 Firstsecond
关键字 -> (相邻词)在中间或末尾
First
关键字 -> (只有第一个词)将以
开头
关键字First
关键字-> (只有第一个词)在中间或末尾
Second
关键词 -> (只有第二个词)会以
开头
关键字Second
关键字-> (只有第二个字)中间或末尾
然后我要它继续如下; (全部)
第一个asdasd关键字
关键字 asdasdfirst 关键字
关键字 asdasdfirstasdasd 关键字
第二个asdasd关键字
关键字 asdasdsecond 关键字
关键字asdasdsecondasdasd关键字
是的,FULLTEXT 不会进行这种搜索。这是 word-oriented。
你想要的并不简单SQL。我想你想要这样的东西来打第一个关键词。
SET @match := 'first'
SELECT MIN(priority) priority, value
FROM (
SELECT 1 priority, value FROM tbl WHERE value LIKE CONCAT(@match, ' %')
UNION ALL
SELECT 2 priority, value FROM tbl WHERE value LIKE CONCAT('% ', @match, ' %')
UNION ALL
SELECT 3 priority, value FROM tbl WHERE value LIKE CONCAT('%', @match, '%')
) results
GROUP BY value
ORDER BY MIN(priority), value;
通常,您使用 UNIONed 系列的 SELECT,并为 full-word 和嵌入的单词匹配设置优先级,并为每一行采用优先级最低的匹配项。
您需要详细说明处理这两个关键字的一般模式。这看起来可能会变成 xxx 脖子上的真正疼痛才能正确。 LIKE '%something'
搜索词意味着它不会很快。
如果您要大规模使用它,可能值得研究 Sphinx。