5

私は mysql で一連のテストを行っていfull text boolean modeますが、私のテストから、複数の単語にマイナス記号を使用できないようです?

たとえば、2行あります..

id,name
1,2011-12 Fleer Retro auto jordan non
2,1999 jordan non auto

次のクエリを実行すると:

SELECT auction_id,`name`,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -non' IN BOOLEAN MODE);

両方の行が期待どおりに表示されません。ただし、このクエリを実行すると:

SELECT auction_id,`name`,description FROM auctions WHERE MATCH(`name`) AGAINST('+jordan +auto -"non auto"' IN BOOLEAN MODE);

両方の行が表示されません (同じ結果)。行1が戻ってくるべきではありませんか?

編集:ft_min_word_lenはに設定されて2おり、ストップワードファイルを無効にしているため、それとは関係ありません。

フィドル: http://sqlfiddle.com/#!2/d1987/4

ただし、フィドルはデフォルトのストップワードファイルを使用しているため、「非」ワードでテストしても機能しないようです。

4

2 に答える 2

0

言いたくないのですが、 を使用する必要がありますLIKE。以下に、希望どおりに機能するクエリを含めました

SELECT auction_id,`name` FROM auctions WHERE MATCH(`name`) AGAINST('+jordan' IN BOOLEAN
MODE) AND `name` NOT LIKE('%non auto%') ;

フルテキスト モードを使用する際の問題は、MySQL のドキュメントによると次のとおりです。

フレーズ検索では、フレーズとまったく同じ単語が同じ順序で含まれている一致のみが必要です。たとえば、「テスト フレーズ」は、MySQL 5.0.3 では「テスト、フレーズ」と一致しますが、それ以前では一致しません。

これがあなたが困っている理由です。お役に立てれば。編集:なぜこのように正確に動作するのか(互いに相対的な場所に関係なく、 auto と non を含むものを除く)については、私には手がかりがありませんが、このデフォルトの動作をオーバーライドする方法はあまりないようです.

于 2013-06-19T18:17:35.823 に答える