Mysql 如何在全文搜索中不使用空格分隔搜索所有文本

Mysql 如何在全文搜索中不使用空格分隔搜索所有文本,mysql,sql,Mysql,Sql,我有一个全文搜索的查询 select title from products where MATCH (title) AGAINST ('green book') 但此查询返回此产品 +-------------+------------------+ | id | title | ---------------------------------- | 34 | green book | ----------------

我有一个全文搜索的查询

select title from products where MATCH (title) AGAINST ('green book') 
但此查询返回此产品

+-------------+------------------+
|      id     |      title       |
----------------------------------
|      34     |    green book    |
----------------------------------
|      84     |    green shirt   |
----------------------------------
|      22     |    red book      |
----------------------------------
我使用Like%操作返回正确的数据,但我需要排名功能和更好的性能,因为此列的长度超过2000

我的预期产出:

+-------------+------------------+
|      id     |      title       |
----------------------------------
|      34     |    green book    |
----------------------------------

首先,你很幸运,你的搜索词都不是停止词或太短

第二,您需要回顾如何使用。文本中的任何匹配都将返回一个大于0的值-在您的情况下,是两个单词中的一个还是两个。拥有一个单词的多个副本可能会提高分数

您可以使用+-修改搜索中使用的单词,这需要它们的存在。Luuk在评论中指出,除了需要布尔模式外:

where MATCH (title) AGAINST ('+green +book' in boolean mode)

首先,你很幸运,你的搜索词都不是停止词或太短

第二,您需要回顾如何使用。文本中的任何匹配都将返回一个大于0的值-在您的情况下,是两个单词中的一个还是两个。拥有一个单词的多个副本可能会提高分数

您可以使用+-修改搜索中使用的单词,这需要它们的存在。Luuk在评论中指出,除了需要布尔模式外:

where MATCH (title) AGAINST ('+green +book' in boolean mode)

这里有两种可能twpo是如何做到这一点的


这里有两种可能性twpo是如何做到的


DBFIDLE

从与“+绿色+书籍”匹配的产品中选择名称从与“+绿色+书籍”匹配的产品中选择名称感谢您的解释感谢您的解释 ✓ ✓
SELECT * FROM products WHERE match(title) against('+green +book' IN BOOLEAN MODE) 
AND title like '%green book%'
id | title -: | :--------- 34 | green book
  SELECT * FROM products WHERE match(title) against('"green book"' IN BOOLEAN MODE) 
id | title -: | :--------- 34 | green book