MySQL の全文検索の機能は、ユーザーが調整できるパラメータをほどんど持っていません。全文検索の動作をある程度コントロールすることは可能ですが、変更にはソースコードの改変が必要になる場合があるので、MySQL ソース配布物が必要です。項2.10. 「ソースの配布を使用した MySQL のインストール」 を参照してください。
全文検索は最大の効果を発揮するよう、慎重に調整されています。デフォルトの動作を改変すると、多くの場合、その効果を低めることになります。特に知識がないかぎり、MySQL のソースを変更しないでください。。
この節で説明されている全文変数のほとんどは、サーバーの起動時に設定する必要があります。変更にはサーバーの再起動が必要です。サーバーが作動している間は手を加えることはできません。
変数のあるものは、変更するとテーブルの
FULLTEXT
インデックスを再構築しなければなりません。この手順は、この節の最後で説明されています。
インデックスを付けるにあたっての単語の最小および最大の文字数は、ft_min_word_len
および
ft_max_word_len
システム環境変数によって定義されています。詳細は、Server System Variables
を参照してください。デフォルトの最小値は
4
文字で、最大値はバージョンによって異なります。これらの値を変更する場合は、FULLTEXT
インデックスを再構築する必要があります。たとえば、3
文字でも検索を可能にしたい場合、次のラインをオプションファイルに入力することで、ft_min_word_len
変数を設定できます :
[mysqld] ft_min_word_len=3
その後、サーバーを再起動し、FULLTEXT
インデックスを再構築します。このリストの後にある説明の、myisamchk
についての記述は特に注意してお読みください。
デフォルトのストップワードリストを上書きするには、ft_stopword_file
システム変数を設定します。詳細は、Server System Variables
を参照してください。変数値は、ストップワードリストを含むファイルのパス名か、ストップワードのフィルタ処理を無効にする空の文字列になります。この変数の値か、ストップワードファイルの内容を変更したあと、サーバーを再起動し、FULLTEXT
インデックスを再構築してください。
ストップワードリストはフリー形態です。つまり、改行、スペース、またはコンマなどの非英数文字を使用して、ストップワードを区切ることができます。例外は、単語の一部として扱われる、下線文字
(「_
」)
と単一引用符
(「'
」)
です。ストップワードリストのキャラクタセットは、サーバーのデフォルトのキャラクタセットです。Server Character Set and Collation
参照。
自然言語検索の 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
権限が必須です。この場合は、インデックスを再構築する必要はありません。この変数の設定をつかさどる規則の説明を、Server System Variables
でご覧ください。
言語文字とされる文字のセットを変更したい場合、方法はふたつあります。ハイフン文字 (' - ') を言語文字として扱いたいと仮定します。下記のどちらかの方法を使用してください :
MySQL ソースを改変する :
storage/myisam/ftdefs.h
で、true_word_char()
および
misc_word_char()
マクロをご覧ください。そのマクロのどちらかに
'-'
を加え、MySQL
を再コンパイルします。
キャラクタセットファイルを改変する :
これには再コンパイルは不要です。true_word_char()
マクロは、「character type」
テーブルを使用して、ほかの文字と、アルファベットおよび数字を区別します。いずれかのキャラクタセット
XML ファイル内の
<ctype><map>
のコンテンツを編集し、'-'
を 「文字」
として指定することができます。その後、その特定のキャラクタセットを
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
ステートメントの使用です。これらのステートメントは、正しいフルテキストパラメータ値を理解しているサーバーによって実行されます。