【问题标题】:MATCH AGAINST not fetching multi columnMATCH AGAINST 不获取多列
【发布时间】:2016-06-08 19:11:56
【问题描述】:

我有一个非常简单的 FULLTEXT 搜索,其中包含准备好的语句。 我的所有列都正确索引为 FULLTEXT。

如果我尝试 MATCH 一列,则搜索和获取工作正常,但是,当我一次使用 2 列时,我无法获取结果,尽管它们是预期的。 1)我相信我的错误出现在我的代码的 fetch 部分,但我不明白为什么如果它与 1 列一起使用,这将是多列 MATCH 的问题。 2) 我知道如果超过 50% 的表记录与搜索匹配,则全文搜索不会返回结果。那你怎么处理这种情况呢?

$newParameter='%'.$sanitized.'%';
$query = "SELECT DISTINCT name, description FROM recipes 
          WHERE MATCH (name, description) AGAINST (?)";

if($stmt = $this->mysqli->prepare($query))
  {
    $stmt->bind_param('s', $newParameter);
    $stmt->execute();

    /* bind results to prepared statement */
    $stmt->store_result();
    $stmt->bind_result($name, $description);

    /* fetch values */
    while ($stmt->fetch()) {
    /*  
     *  ERROR HERE:
     *  NOT ENTERING HERE WITH MULTICIOLUM MATCHING.
     */
      echo $name . ", " . $description . "<br>";
    }

  } else {
    echo "Empty query";
  }

注意:如果我单独匹配(名称)或匹配(描述),此代码将返回它应该返回的内容。 TY 帮忙。

【问题讨论】:

    标签: mysql full-text-search match-against


    【解决方案1】:

    已解决:问题出在索引上。

    具体来说,我的列是用 ADD FULLTEXT(column_name) 逐一索引的。

    但是,要使其工作,该列必须在列表中使用索引 CREATE FULLTEXT INDEX idx ON table_name(columns_names);

    https://dev.mysql.com/doc/refman/5.6/en/innodb-fulltext-index.html

    此外,使用 MySQLWorkbench 测试您的查询并获取有关 PHP 查询可能无法打印的错误的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-12
      • 2013-01-24
      • 2012-05-22
      • 1970-01-01
      • 2012-03-15
      • 2011-11-10
      • 1970-01-01
      相关资源
      最近更新 更多