SQL 全文查询仅适用于第一个关键字

SQL full text query only working for first keyword

我不是全文搜索专家,所以我在谷歌上搜索了一个 SQL 查询 SORTED BY RELEVANCY 并想出了这个有点工作:

SELECT *, MATCH(fulltext_tags) AGAINST ('+blue' '+red') AS relevance FROM `products` WHERE MATCH(fulltext_tags) AGAINST ('+blue' '+red' IN BOOLEAN MODE) ORDER BY relevance DESC

问题是,只考虑了第一个关键字。 假设我有这个产品 table

+----------+------------------+
|   name   |  fulltext_tags   |
+----------+------------------+
| Product1 | Blue             |
| Product2 | Red              |
| Product3 | Blue Red         |
| Product4 | Yellow           |
+----------+------------------+

以上查询只returns产品1和3,完全忽略了第二个关键字'+red'。即使添加 +Yellow 作为第三个关键字仍然会忽略它,因此它会忽略第一个关键字之后的任何内容...

我如何使用 +blue 和 +red returns Product1 Product2 和 Product3 进行查询,因为 fulltext_tags 字段中至少有一个或两个关键字出现?

谢谢

您应该使用 REGEXP '[[:<:]]Red[[:>:]]' 来查找确切的词,因此请尝试以下查询,希望它会起作用并满足您的要求。

SELECT * FROM `products` 
  WHERE fulltext_tags REGEXP '[[:<:]]Red[[:>:]]' 
  OR fulltext_tags REGEXP '[[:<:]]Blue[[:>:]]';

可以看到DEMO Here.

更新 1

试试这个查询,我观察到你想做这样的事情,

SELECT *, 
      MATCH(fulltext_tags) AGAINST ('+blue' '+red')     
      AS relevance FROM `products` 
  WHERE MATCH(fulltext_tags) AGAINST('Red') 
      OR MATCH(fulltext_tags) AGAINST('Blue')
  ORDER BY relevance DESC

看这里ONLINE DEMO