2017-07-13 10 views
0

私はsubstancesという化学物質の表を持っています。 MySQLのfull text natural language機能を利用して検索機能を無効にしようとしています。MySQLブールフルテキスト検索が期待通りに機能しない

私は、そのようなコマンドはname欄に私のsubstancesテーブルの上に作業できるようにするには、次を実行しています

ALTER TABLE substances ADD FULLTEXT(`name`); 

私は、次のコマンドを実行した場合、それは私の言葉「クロム」のいずれかを含むいずれかの結果が得られますまたは、予想通り「三酸化」:

SELECT * FROM substances WHERE MATCH (`name`) AGAINST ('Chromium Trioxide' IN NATURAL LANGUAGE MODE); 

は、しかし、私が何をしたいのか、それらの間の文字(例えば「クロム(VI)三酸化」)がある場合でも、「三酸化クロム」を含む行のみを見つけることです。私の理解では、+前に各単語を使用してこれを行うだろうということです。

SELECT * FROM substances WHERE MATCH (`name`) AGAINST ('+Chromium +Trioxide' IN NATURAL LANGUAGE MODE); 

をしかし、それは私に、元のクエリと同じ結果が得られます - 「クロム」または「三酸化」のどちらか一方が含まれている、すなわち何かを。

どこが間違っていますか?私はブール全文検索(https://dev.mysql.com/doc/refman/5.7/en/fulltext-boolean.html)を読んだが、私が見つけた唯一の情報は各キーワードの前に+を含めることだった。

MySQLバージョンは5.7.9で、テーブルはMyISAMです。私はREGEXを使用して行うことができると思う

が、私はmysqlのブール全文検索や自然のフルテキスト検索を使用してそれを解決する方法がわからない

+0

ながら(https://dev.mysql.com/doc/refman/5.7/en/regexp.htmlを参照してください)あなたは基本的に正しく読み込みます。ブーリアンモード( '+'のような修飾子をサポートしています)を使うには 'NATURAL LANGUAGE MODE'の代わりに' IN BOOLEAN MODE'を書かなければなりません。 – Solarflare

答えて

0

SELECT * FROM substances WHERE `name` REGEXP 'Chromium .* Trioxide' 
関連する問題