【问题标题】:mysql match against ~ examplemysql 匹配对 ~ 例子
【发布时间】:2012-03-13 17:10:31
【问题描述】:

下面是我坚持使用的示例 sql,它不会返回名为“mill hotel”的酒店 它返回其他 10 家酒店。任何帮助都会非常感谢


SELECT * FROM tbl WHERE match(hotel) against('the mill hotel' IN BOOLEAN MODE) LIMIT 10";

【问题讨论】:

  • 我的 sql 找到了,但我限制了 10 条,它不在前 10 中?如果我让酒店这个词变得不那么重要,那么它可能会起作用吗? SELECT * FROM tbl WHERE match(hotels) against('the mill

标签: php mysql search


【解决方案1】:

您需要指定运算符,因为未在 OR 运算中指定任何结果。试试这个:

SELECT * FROM tbl WHERE match(hotel) against('+the mill hotel' IN BOOLEAN MODE) LIMIT 10";

Read more

【讨论】:

  • 匹配关键字可以传递不同的列名吗?
【解决方案2】:

您始终可以使用引号来匹配短语mill hotel 而不是单词mill 和/或hotel

SELECT * FROM tbl WHERE match(hotel) against('"the mill hotel"' IN BOOLEAN MODE) LIMIT 10;

或者,简单地说:

SELECT * FROM tbl WHERE match(hotel) against('"mill hotel"' IN BOOLEAN MODE) LIMIT 10;

我相信所有的

SELECT * FROM tbl WHERE match(hotel) against('+the mill hotel' IN BOOLEAN MODE) LIMIT 10;

does 要求单词 the 匹配,留下 millhotel 为可选:如果你想要求整个短语,它需要用引号引起来:

SELECT * FROM tbl WHERE match(hotel) against('+"the mill hotel"' IN BOOLEAN MODE) LIMIT 10;

虽然当您只有一个搜索词组时,如本例所示,加号是多余的。

【讨论】:

    【解决方案3】:

    在这种情况下使用+ (plus)...

    SELECT * FROM tbl WHERE match(hotel) against ('+the mill hotel' IN BOOLEAN MODE) LIMIT 10";
    

    阅读this了解详细信息。

    【讨论】:

      【解决方案4】:

      12.9.2 布尔全文搜索

      MySQL 可以使用 IN BOOLEAN MODE 修饰符执行布尔全文搜索。

      布尔全文搜索具有以下特点:

      • 它们不会自动按相关性递减的顺序对行进行排序。

      12.9.1 自然语言全文搜索

      默认情况下或使用 IN NATURAL LANGUAGE MODE 修饰符,MATCH() 函数针对文本集合执行自然语言搜索字符串。集合是包含在 FULLTEXT 索引中的一组一个或多个列。搜索字符串作为 AGAINST() 的参数给出。对于表中的每一行,MATCH() 返回一个相关值;也就是说,搜索字符串与 MATCH() 列表中指定的列中该行中的文本之间的相似性度量。

      因此,您需要对它们进行排序或取消对结果的限制。

      【讨论】:

        【解决方案5】:

        根据 PHP 中的短语执行以下 mysql 查询

        SELECT * 
        FROM tbl 
        WHERE match(hotel) against('"the mill hotel"' IN BOOLEAN MODE)
        

        你必须这样做:

        $phrase = "the mill hotel";
        $phrase= '"'.$phrase.'"'; // Adds quotes around string
        
        $stmt = $db->prepare('SELECT * FROM tbl WHERE MATCH(hotel)    AGAINST(:phrase )');
        $stmt->bindParam(':phrase ', $phrase , PDO::PARAM_STR);
        $stmt->execute();
        

        感谢@ub3rst4r 的回答:Force exact string MATCH for PDO prepared statements

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-30
          • 1970-01-01
          • 2011-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多