16

下面是我坚持使用的示例 sql,它不会返回名为“iphone 4s”的产品,它会返回 10 个其他结果。任何帮助都会非常感谢

第一个 sql 示例

SELECT * FROM products 
          WHERE match(desc) against('+iphone +4s' IN BOOLEAN MODE) LIMIT 10";

结果:包含单词“iphone”和“4s”

第二个 sql 示例

SELECT * FROM products 
           WHERE match(desc) against('+iphone 4s' IN BOOLEAN MODE) LIMIT 10";

结果:包含单词“iphone”,但如果它们还包含“4s”,则排名更高

第三个 sql 示例

SELECT * FROM products 
           WHERE match(desc) against('iphone 4s' IN BOOLEAN MODE) LIMIT 10";

结果:包含单词“iphone”或“4s”

我要搜索的是“iphone 4s”,但它带有其他结果,例如“iphone 很好,但是 4s...”、“新的 iphone 5 已发布...”、...

谁能帮我解决它?谢谢。

4

2 回答 2

19

要匹配一个精确的短语,只需使用双引号将要匹配的短语括起来;

SELECT * 
FROM products 
WHERE MATCH(desc) 
      AGAINST('"iphone 4s"' IN BOOLEAN MODE) 
LIMIT 10

更多信息在手册页

于 2012-12-27T13:11:04.583 回答
0

使用正则表达式

SELECT * FROM products 
WHERE desc REGEXP 'iphone[[. .]]*4s'
LIMIT 10;

SQLFiddle 演示

于 2012-12-27T13:13:40.670 回答