Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL全文查询仅适用于第一个关键字_Php_Mysql_Full Text Search_Full Text Indexing - Fatal编程技术网

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

Php SQL全文查询仅适用于第一个关键字,php,mysql,full-text-search,full-text-indexing,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 问题是,只考虑第一个关键字。 假设我有这

我不是全文搜索方面的专家,所以我在谷歌上搜索了一个按相关性排序的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,因为在全文标记字段中至少有一个或两个关键字


谢谢

您应该使用
REGEXP'[[[::]]]'
来查找准确的单词,所以请尝试下面的查询,希望它能工作并满足您的要求

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

请参见此处

Hi,这仍然无法执行,只有使用match()对()的全文查询将根据相关性返回结果…@Flames,我用SQLFIDLE更新了我的答案,所以请检查一次。非常感谢!我试试这个,然后再打给你!谢谢你,皮尤斯,这就像一个魅力,正是我现在需要的查询考虑到所有关键字,并按相关性排序。非常感谢!!!:)默认情况下,全文索引将忽略3个字母或更小的单词。请删除重复项,此问题的答案与查询中使用的3个字母的关键字“red”无关。我特别指出,即使使用黄色,它仍然不起作用,所以问题不在于3个字母的关键字。
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