2017-02-04 28 views
0

自然言語モードでは、AND演算子を使用してInnoDBエンジンで完全なテスト検索を使用できますか?MySQLフルテキスト検索AND演算子

SELECT *, MATCH (body) AGAINST ('mysql database') AS score FROM post ORDER BY score DESC; 

を私は両方の単語に一致するすべてのレコードを返す場合は、このクエリの場合:「mysqlの」AND「データベース」私は以下のようですが、必要に応じてすべての単語で照会を意味します。私は私が+を使用することができます知っているとBOOLEANモードが、それは私が無視する他の事業者のような別の問題が発生する(*、 - 、 "」..)

+0

両方の単語が一致した場合、スコアは高くあるべきで、そうでない – Barmar

+0

@Barmar私はすべての単語が一致するレコードのみ返したい - ?。とスコアが唯一のパフォーマンス向上のために、これらのレコードに対して計算されなければならないの – jgr

+0

次に、必要'+'と 'IN BOOLEAN MODE'の間の文字列を返します。 –

答えて

1

が個別に各単語をテストWHERE句を追加します。

SELECT *, MATCH (body) AGAINST ('mysql database') AS score 
FROM post 
WHERE MATCH(body) AGAINST ('mysql') AND MATCH(body) AGAINST('database') 
ORDER BY score DESC; 
+0

私はこれについて考えましたが、パフォーマンスはどうですか?クエリは3から10語で構成されています。スコアコンピューティング?また、クエリフレーズだけに基づいてその構文を動的に準備することも良いでしょう。たとえば、私はクエリ 'どのようにjsonをjavaでオブジェクトを解析する'がありますか?JMeterに渡してmysqlに問い合わせるべきです。 – jgr

+0

ブール検索はほぼ確実に良いでしょうが、あなたはそれを使うことはできません。 – Barmar

+0

ブール値を使用する制限はありません。私は自然なモードで何らかの方法で行うほうがいいと思っていました。なぜなら、*などのような奇妙な文字を含むクエリがあるからです。ブールモードで簡単に無視しますか? AND演算子でクエリを準備するだけで、特殊文字が無視されているユーザーから直接取得したフレーズを(パフォーマンステストを行うため)最高のパフォーマンスで実行する必要があります。 – jgr