Php SQL全文查询仅适用于第一个关键字
我不是全文搜索方面的专家,所以我在谷歌上搜索了一个按相关性排序的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 问题是,只考虑第一个关键字。 假设我有这
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