複数列検索の「列リストに一致する FULLTEXT インデックスが見つかりません」のトラブルシューティング
MATCH...AGAINST クエリの構築時フルテキスト インデックスに複数の列が含まれる場合、インデックス内の列の順序が MATCH 句に出現する順序と一致していることを確認することが重要です。表示されたエラー メッセージによると、フルテキスト インデックス定義には MATCH 句よりも多くの列が含まれているようです。
前述したように、テーブルには複数の列で定義されたフルテキスト インデックスが含まれています:
FULLTEXT KEY `name` (`name`,`breadcrumb`,`description`,`brand`,`price`,`year`,`km`,`usage`,`type`)
ただし、MATCH 句には次の列のみが含まれています:
MATCH(`brand`) AGAINST('Skoda');
インデックス内の列数と MATCH 句の不一致がエラーの原因です。この問題を修正するには、インデックス定義または MATCH 句を調整して、それらが確実に一致するようにする必要があります。
推奨される方法は、検索で使用する列と一致するようにフルテキスト インデックスを変更することです。この場合、次のクエリを実行して、ブランド列のみを含む新しいフルテキスト インデックスを追加できます:
ALTER TABLE products ADD FULLTEXT(brand);
適切なインデックスを追加した後、MATCH クエリを再実行します:
SELECT * FROM products WHERE MATCH(`brand`) AGAINST('Skoda');
これにより、エラー メッセージなしで期待どおりの結果が返されるはずです。
以上が複数の列を検索すると「列リストに一致する FULLTEXT インデックスが見つかりません」というメッセージが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。