私は私のクエリ構文で、問題を抱えている:Mariadbフルテキストマッチ2列
SELECT `users`.`name`, `posts`.*
FROM `posts`
LEFT JOIN `users` ON `posts`.`user_id` = `users`.`id`
WHERE MATCH (title,body) AGAINST('search')
MATCH
は私がそれを修正する方法をアドバイス取ってください...一つだけ、なしの両方で作業しているに...
私は私のクエリ構文で、問題を抱えている:Mariadbフルテキストマッチ2列
SELECT `users`.`name`, `posts`.*
FROM `posts`
LEFT JOIN `users` ON `posts`.`user_id` = `users`.`id`
WHERE MATCH (title,body) AGAINST('search')
MATCH
は私がそれを修正する方法をアドバイス取ってください...一つだけ、なしの両方で作業しているに...
"search"
がであることを確認するには、title
とbody
の両方を使用することをお勧めします。 (私は質問とは無関係であるとしてusers
を省略。)FULLTEXT
を使用する場合
SELECT p1.*
FROM posts AS p1
WHERE MATCH(p1.title) AGAINST("search" IN BOOLEAN MODE)
AND EXISTS (
SELECT *
FROM posts AS p2
WHERE MATCH(p2.body) AGAINST("search" IN BOOLEAN MODE)
)
、私はオプティマイザが効率的に二回FULLTEXTを適用する方法を知っているとは思わないので、これはそれを行うために取得するための卑劣な方法です。そう。
最初に単語が少ないと仮定してtitle
を選んだので、もう一方のテストに進む必要がありません。
それ "インデックスマージが交差" このためでキックすることをことがあります
SELECT *
FROM posts
WHERE MATCH(title) AGAINST("search" IN BOOLEAN MODE)
AND MATCH(body) AGAINST("search" IN BOOLEAN MODE)
で両方例を、あなたが必要両方:
FULLTEXT(title),
FULLTEXT(body)
シングルフィート両方の列のインデックスは有用ではありません。
詳細については、SHOW CREATE TABLE
とEXPLAIN SELECT ...
を入力してください。
ENGINE=MyISAM
かENGINE=InnoDB
のいずれかが問題になる可能性があります。 2つの実装は全く異なります。
「AGAINSTa'?あなたはそれを "OR"か "AND"のどちらかにしたいですか? –
申し訳ありません..列のタイトルと本文の両方の列で検索が必要です – user2579395
はい、両方の列が ''search''に一致する必要がありますか?または** **十分ですか? –