MySQL の全文検索の機能は、ユーザが調整できるパラメータをほどんど持っていません。全文検索の動作をある程度コントロールすることは可能ですが、変更にはソースコードの改変が必要になる場合があるので、MySQL ソース配布物が必要です。詳細は 項2.9. 「ソースのディストリビューションを使用した MySQL のインストール」 を参照してください。
全文検索は最大の効果を発揮するよう、慎重に調整されています。デフォルトの動作を改変すると、多くの場合、その効果を低めることになります。特に知識がない限り、MySQL のソースを変更しないでください。。
このセクションで説明されている全文変数のほとんどは、サーバの起動時に設定する必要があります。変更にはサーバの再起動が必要です。サーバが作動している間は手を加えることはできません。
変数のあるものは、変更するとテーブルの
FULLTEXT
インデックスを再構築しなければなりません。この手順は、このセクションの最後で説明されています。
インデックスを付けるにあたっての単語の最小および最大の文字数は、ft_min_word_len
および ft_max_word_len
システム環境変数によって定義されています。(
項4.2.3. 「システム変数」 参照 )
デフォルトの最小値は 4
文字で、最大値はバージョンによって異なります。これらの値を変更する場合は、FULLTEXT
インデックスを再構築する必要があります。例えば、3
文字でも検索を可能にしたい場合、次のラインをオプション
ファイルに入力することで、ft_min_word_len
変数を設定できます :
[mysqld] ft_min_word_len=3
その後、サーバを再起動し、FULLTEXT
インデックスを再構築します。このリストの後にある説明の、myisamchk
についての記述は特に注意してお読みください。
デフォルトのストップワード
リストを書き換えるには、ft_stopword_file
システム環境を設定してください。(
項4.2.3. 「システム変数」 参照 )
変数値は、ストップワード
リストを含むファイルのパス名か、ストップワードのフィルタ処理を無効にする空のストリングになります。この変数の値か、ストップワード
ファイルの内容を変更した後、サーバを再起動し、FULLTEXT
インデックスを再構築してください。
ストップワード
リストはフリー形態です。つまり、改行、スペース、またはコンマなどの非英数文字を使用して、ストップワードを区切ることができます。
例外は、単語の一部として扱われる、下線文字
( ‘_
’ ) と単一引用符 (
‘'
’ )
です。ストップワード
リストの文字セットは、サーバのデフォルトの文字セットです。項9.3.1. 「サーバのキャラクタセットおよび照合順序」
参照。
自然言語検索の 50%
の境界値は、選択された特定の加重スキームによって定義されています。これを無効にするには、storage/myisam/ftdefs.h
で次のラインを探してください :
#define GWS_IN_USE GWS_PROB
Change that line to this:
#define GWS_IN_USE GWS_FREQ
その語、MySQL
を再コンパイルします。この場合は、インデックスを再構築する必要はありません。注記
:この変更を行うことで、MATCH()
関数に対して適切な関連値を提供する MySQL
の能力は大幅に低下します。一般的な単語をどうしても検索する必要があるなら、50%
の境界値を変更しなくても済む、IN
BOOLEAN MODE
を使用して検索するほうが賢明です。
ブール全文検索に使用した演算子を変更するには、ft_boolean_syntax
システム環境変数を設定します。この変数はサーバの使用中でも変更することができますが、実行するには
SUPER
権限が必須です。この場合は、インデックスを再構築する必要はありません。この変数の設定をつかさどるルールの説明を、項4.2.3. 「システム変数」
でご覧ください。
言語文字とされる文字のセットを変更したい場合、方法はふたつあります。ハイフン文字 ( ' - ' ) を言語文字として扱いたいと仮定します。下記のどちらかの方法を使用してください :
MySQL ソースを改変する :
storage/myisam/ftdefs.h
で、true_word_char()
および
misc_word_char()
マクロをご覧ください。そのマクロのどちらかに
'-'
を加え、MySQL
を再コンパイルします。
文字セット ファイルを改変する :
これには再コンパイルは不要です。true_word_char()
マクロは、「character type」
テーブルを使用して、他の文字と、アルファベットおよび数字を区別します。.
文字セットの XML
ファイルのひとつで、<ctype><map>
の内容を編集し、'-'
を 「letter」
に指定します。その後、FULLTEXT
インデックスに、提示された文字セットを使用します。
改変の後で、FULLTEXT
インデックスを含む各テーブルのインデックスを再構築します。
インデックスに影響を及ぼす全文変数 (
ft_min_word_len
、ft_max_word_len
、または
ft_stopword_file
)を改変する場合、もしくはストップワード
ファイルそのものを変更する場合、変更を行った後に
FULLTEXT
インデックスを再構築し、サーバを再起動させてください。この場合にインデックスを再構築するには、QUICK
修復オペレーションを行えば十分です ;
mysql> REPAIR TABLE tbl_name
QUICK;
FULLTEXT
インデックスをひとつでも含むテーブルはそれぞれ、上記のように修復が必要です。さもなければ、テーブルのクエリが誤った結果を生産し、テーブルの変更によって、サーバはテーブルを修復が必要な破損があるものとみなします。
myisamchk
を使用してテーブルのインデックスを改変する操作
( 修復や分析 )
を行った場合、特に指定しない限り、FULLTEXT
インデックスは、最小文字数、最大文字数、そしてストップワード
ファイルに対するデフォルトの全文パラメータ値を使用して再構築されます。これはクエリの失敗につながります。
問題の原因は、これらのパラメータがサーバにしか認識されていないことです。それらは
MyISAM
インデックス
ファイルには保存されていません。この問題を避けるには、サーバによって使用される最小または最大文字数、もしくはストップワード
ファイル値を改変した場合、mysqld
に使用する myisamchk と同じ
ft_min_word_len
、ft_max_word_len
、および
ft_stopword_file
値を指定してください。例えば、最小文字数を
3 に設定した場合、次のように
myisamchk
をもってテーブルを修復することができます :
shell> myisamchk --recover --ft_min_word_len=3 tbl_name
.MYI
myisamchk
とサーバが、間違いなく全文パラメータに同じ値を使用するよう、それぞれをオプション
ファイルの [mysqld]
と
[myisamchk]
のセクションに置いてください :
[mysqld] ft_min_word_len=3 [myisamchk] ft_min_word_len=3
myisamchk
の使用に替わる方法は、REPAIR TABLE
、ANALYZE TABLE
、OPTIMIZE
TABLE
、もしくは ALTER TABLE
文の使用です。これらのステートメントは、適切な全文パラメータ値を選ぶことのできるサーバによって実行されます。