加入两个表进行全文搜索

时间:2013-02-24 01:49:08

标签: php mysql codeigniter

我有两个表:食谱和标签,用于在CodeIgniter App中进行全文搜索。对于每1个配方,它们是无限数量的标签(标签的一些例子:美味,鸡肉,晚餐)。

食谱表中的样本行:

Recipe Id:1 .....食谱名称:Mo's Chicken Dinner .....

Recipe Id:2 .....食谱名称:Mo's Lobster Bisque .....

标签表中的示例行:

相应食谱ID:1 .....标签:美味.....

相应食谱ID:2 .....标签:海鲜.....

我希望能够搜索龙虾并在搜索中显示名称与“龙虾”匹配的食谱。但我也想搜索“海鲜”,并有标签显示相应的食谱。

这是我的代码(在我添加连接语句之前,它用于一个表全文搜索):

// Execute our SQL statement and return the result
    $sql = "SELECT recipes.name,recipes.durationtotal
                FROM recipes LEFT JOIN tags ON recipes.id = tags.recipes_id
                WHERE MATCH (recipes.name,tags.tag) AGAINST (?) > 0 AND user_id = ".$id." ORDER BY recipes.name ASC";
    $query = $this->db->query($sql, array($terms, $terms));
    return $query->result();

将其放入后,我收到错误:

Error Number: 1210

Incorrect arguments to MATCH

SELECT recipes.name,recipes.durationtotal FROM recipes LEFT JOIN tags ON recipes.id = tags.recipes_id WHERE MATCH (recipes.name,tags.tag) AGAINST ('f') > 0 AND user_id = 1 ORDER BY recipes.name ASC

Filename: search_model.php

Line Number: 15

第15行是:$query = $this->db->query($sql, array($terms, $terms));

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果搜索中涉及的所有表都不是MyISAM,并且您没有在要搜索的特定列集上设置全文索引,则MATCH AGAINST查询将失败。我认为,由于您要搜索不同表中的列,因此无法创建跨两个表的全文索引。您可以尝试IN BOOLEAN MODE:

MATCH (recipes.name,tags.tag) AGAINST (? IN BOOLEAN MODE)

布尔模式比标准全文匹配更宽容一些。