質問
データベースから情報を取得するために、次の呼び出しを使用します。
select *
from submissions
where
match( description ) against ('+snowboard' in boolean mode )
and (!disabled or disabled='n')
order by datelisted desc limit 30
つまり、説明に「スノーボード」があるすべてが見つかります。これが問題です:
select *
from submissions
where
match( description ) against ('+snowboard +mp4' in boolean mode )
and (!disabled or disabled='n')
order by datelisted desc limit 30
何らかの理由で +MP4を無視し、最初のクエリと同じものを返します
select *
from submissions
where
match( description ) against ('+mp4' in boolean mode )
何も返さないので、基本的には検索で無視されているように見えます
誰かがこの行動を回避する方法を知っていますか?
解決
MySQLのブールモードは、特定の長さよりも長い単語のみと一致します。と mp4
短すぎます。しきい値を変更するには、MySQLを再コンパイルする必要があります
編集:結局のところ、これは構成ファイルを介して設定できます。 http://dev.mysql.com/doc/refman/5.0/en/fulltext-fine-tuning.html Furhter Reference用
他のヒント
問題は最小の単語長であり、デフォルトでは3文字です。同じことを試してみてください +snowboard +scooter
そして、あなたはそれが機能することを見るでしょう。 (もちろん、データベースにスクーターがないとします)。
見る 微調整MySQLフルテキスト検索 それを変更する方法について:
インデックス作成される単語の最小および最大長さは、
ft_min_word_len
とft_max_word_len
システム変数。 (セクション5.1.4、「サーバーシステム変数」を参照してください。)デフォルトの最小値は4文字です。デフォルトの最大値はバージョン依存です。どちらの値を変更した場合は、FullTextインデックスを再構築する必要があります。たとえば、3文字の単語を検索可能にする場合は、次の行をオプションファイルに配置することで、FT_MIN_WORD_LEN変数を設定できます。
[mysqld] ft_min_word_len=3
次に、サーバーを再起動し、フルテキストインデックスを再構築します。特に、このリストに続く指示におけるMyisamchkに関する発言に注意してください。