0

CodeIgniter アプリで全文検索に使用するレシピとタグの 2 つのテーブルがあります。1 つのレシピごとに、タグの数に制限はありません (タグの例: おいしい、チキン、ディナー)。

レシピ テーブルのサンプル行:

レシピ ID: 1.....レシピ名: Mo's Chicken Dinner.....

レシピID:2.....レシピ名:Mo's Lobster Bisque.....

タグ テーブルのサンプル行:

対応するレシピ ID: 1.....タグ: おいしい.....

対応するレシピ ID: 2.....タグ: シーフード.....

ロブスターを検索して、名前が「ロブスター」に一致するレシピが検索に表示されるようにしたいと考えています。しかし、「シーフード」を検索して、対応するレシピを含むタグを表示したいと考えています。

これが私のコードです(結合ステートメントを追加する前に、1つのテーブル全文検索で機能しました):

// 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));

助けてくれてありがとう!

4

1 に答える 1

1

検索に関係するすべてのテーブルがMyISAMでなく、検索対象の特定の列セットにフルテキストインデックスを設定していない場合、MATCHAGAINSTクエリは失敗します。異なるテーブルの列を検索しているため、両方のテーブルにまたがるフルテキストインデックスを作成することはできないと思います。ブールモードで試すことができます:

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

ブールモードは、標準の全文マッチングよりも少し寛容です。

于 2013-02-24T02:16:42.473 に答える