MySQL には、全文操作 (インデックス付けされるテキストの構文解析、または検索に使用される用語を判別するためのクエリー文字列の構文解析) のためにデフォルトで使用される組み込みパーサーがあります。全文処理の場合、「構文解析」とは、単語を構成する文字シーケンスや単語の境界となる位置を定義するルールに基づいて、テキストまたはクエリー文字列から単語を抽出することを意味します。
インデックスを作成するために構文解析するとき、パーサーは各単語をサーバーに渡し、サーバーは単語を全文インデックスに追加します。クエリー文字列を構文解析するとき、パーサーは各単語をサーバーに渡し、サーバーは単語を蓄積して検索に使用します。
組み込みの全文パーサーの構文解析プロパティーは、セクション12.9「全文検索関数」に記載されています。これらのプロパティーには、テキストから単語を抽出する方法を決定するためのルールも含まれています。パーサーは、短い単語または長い単語を除外する ft_min_word_len
、ft_max_word_len
などの特定のシステム変数、および無視される一般的な単語を示すストップワードリストの影響を受けます。
プラグイン API を使用すると、独自の全文パーサーを作成して、パーサーの基本的な機能を制御できます。パーサープラグインは 2 つの役割のいずれかで動作できます。
-
プラグインを組み込みパーサーの代わりに使用できます。この役割では、プラグインは構文解析する対象の入力データを読み取り、入力データを単語に分割し、単語を (インデックス設定または単語の蓄積のために) サーバーに渡します。
この方法でパーサーを使用する 1 つの理由は、入力データを単語に分割する方法を決定するために、組み込みパーサーのルールとは異なるルールを使用する必要がある場合です。たとえば、組み込みパーサーは「case-sensitive」というテキストを「case」および「sensitive」という 2 つの単語で構成されるものとして解釈するが、あるアプリケーションではこのテキストを単一の単語として扱う必要があることもあります。
-
プラグインは組み込みパーサーのフロントエンドとして動作することによって、組み込みパーサーと連動できます。この役割では、プラグインは入力データからテキストを抽出してテキストをパーサーに渡し、パーサーはその通常の構文解析ルールを使用してテキストを単語に分割します。この構文解析は、特に、
ft_
システム変数およびストップワードリストの影響を受けます。xxx
この方法でパーサーを使用する 1 つの理由は、PDF ドキュメント、XML ドキュメント、
.doc
ファイルなどのコンテンツにインデックスを設定する必要がある場合です。組み込みパーサーはこれらのタイプの入力データのためのものではありませんが、プラグインを使用してこれらの入力ソースからテキストを抜き出し、テキストを組み込みパーサーに渡すことができます。
パーサープラグインが両方の役割で動作することも可能です。つまり、平文でないテキスト入力からテキストを抽出し (フロントエンドの役割)、テキストを構文解析して単語を得る (組み込みパーサーの代わりとなる) ことができます。
全文プラグインは、インデックスごとに全文インデックスに関連付けられます。つまり、パーサープラグインを最初にインストールした状態では、全文操作にパーサープラグインを使用することはできません。単にパーサープラグインが利用可能になるだけです。たとえば、個々の FULLTEXT
インデックスを作成するときに、全文パーサープラグインを WITH PARSER
句に指定できるようになります。テーブル作成時にそのようなインデックスを作成するには、次のステートメントを実行します。
CREATE TABLE t
(
doc CHAR(255),
FULLTEXT INDEX (doc) WITH PARSER my_parser
) ENGINE=MyISAM;
または、テーブルが作成されたあとにインデックスを追加できます。
ALTER TABLE t ADD FULLTEXT INDEX (doc) WITH PARSER my_parser;
パーサーをインデックスに関連付けるために SQL を変更する箇所は、WITH PARSER
句のみです。検索は以前と同様に指定し、クエリーを変更する必要はありません。
パーサープラグインを FULLTEXT
インデックスに関連付けると、そのインデックスを使用するためにこのプラグインが必要になります。そのパーサープラグインが削除された場合は、パーサープラグインに関連付けられていたすべてのインデックスが使用できなくなります。プラグインを使用できないテーブルを使用しようとするとエラーになりますが、DROP TABLE
は引き続き実行できます。
全文プラグインについては、セクション24.2.4.4「全文パーサープラグインの作成」を参照してください。MySQL 5.6 では、MyISAM
を使用したフルインデックスプラグインのみがサポートされます。