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

标签 php mysql full-text-search full-text-indexing

我不是全文搜索的专家,所以我在谷歌上搜索了一个按相关性排序的SQL查询,得出了这样的结果:

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

问题是,只考虑第一个关键字。
假设我有这个产品表
+----------+------------------+
|   name   |  fulltext_tags   |
+----------+------------------+
| Product1 | Blue             |
| Product2 | Red              |
| Product3 | Blue Red         |
| Product4 | Yellow           |
+----------+------------------+

上面的查询只返回产品1和3,它完全忽略了第二个关键字'+red'。即使添加+黄色作为第三个关键字仍然会忽略它,因此它会忽略超过第一个关键字的任何内容。。。
如何使查询返回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

关于php - SQL全文查询仅适用于第一个关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37650209/

相关文章:

mysql - 为什么这个 WHERE 子句不能与 Join 一起使用?

Ruby on Rails 中的 MySQL 全文搜索

pdf - 使用 Solr 用页码索引 PDF

PHP 从 webroot 之外的文件中包含 webroot 中的文件

php - 使用HTML中的可滚动表显示数据库表行值

php - 计算高负载下的展示次数

mysql - 全文搜索以及其他位置

javascript - 页面在div中加载,不想为主页创建新页面

PHP 检测(或删除)当前驱动器号?

php - 如何使用 PHP 从 HTML 中提取特定内容?