MySQL 5.1 リファレンスマニュアル :: 11 関数と演算子 :: 11.7 全文検索関数 :: 11.7.5 微調整 MySQL 全文検索
« 11.7.4 全文制限

11.8 キャスト関数と演算子 »
Section Navigation      [Toggle]
  • 11.7 全文検索関数
  • 11.7.1 ブール全文検索
  • 11.7.2 クエリ拡張を伴う全文検索
  • 11.7.3 全文ストップワード
  • 11.7.4 全文制限
  • 11.7.5 微調整 MySQL 全文検索

11.7.5. 微調整 MySQL 全文検索

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 文の使用です。これらのステートメントは、適切な全文パラメータ値を選ぶことのできるサーバによって実行されます。

Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates