如何使用 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