【问题标题】:mysql match against multiple wordsmysql匹配多个单词
【发布时间】:2012-12-27 12:57:19
【问题描述】:

下面是我坚持使用的示例 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 已发布...”、...

谁能帮我解决?谢谢。

【问题讨论】:

  • 如果不是必须使用 match - 反对,您可以使用 like 运算符轻松完成。

标签: mysql full-text-search


【解决方案1】:

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

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

More info at the manual pages.

【讨论】:

    【解决方案2】:

    使用REGEXP

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

    SQLFiddle demo

    【讨论】:

      猜你喜欢
      • 2011-12-21
      • 2019-07-17
      • 2010-12-15
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多