MariaDBにおけるInformation Schema INNODB_FT_DEFAULT_STOPWORDテーブル:詳細解説


MariaDBにおけるInformation Schema INNODB_FT_DEFAULT_STOPWORDテーブル:詳細解説

MariaDBのINFORMATION_SCHEMA INNODB_FT_DEFAULT_STOPWORDテーブルは、InnoDBテーブルにFULLTEXTインデックスを作成する際にデフォルトで使用される停止語(stopword)のリストを格納します。停止語とは、全文検索において除外されるべき単語のことであり、検索結果の精度向上に役立ちます。

テーブル構造

このテーブルは次の3つの列で構成されています。

  • ID: 停止語の一意的な識別子
  • STOPWORD: 停止語
  • IS_DEFAULT: 停止語がデフォルトのものであるかどうかを示すフラグ(1: デフォルト、0: カスタム)

停止語の追加

デフォルトの停止語リストを変更するには、次のいずれかの方法を使用できます。

  • innodb_ft_set_stopwordsシステム変数を設定する
  • ALTER TABLE文を使用してinnodb_ft_default_stopwordテーブルに直接挿入する

例:システム変数による停止語の追加

SET innodb_ft_set_stopwords = 'AND, OR, NOT, BY, FOR, TO, IN, ON, AT, WITH, AS, OF, FROM';

例:ALTER TABLE文による停止語の追加

ALTER TABLE INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD
INSERT VALUES (NULL, 'example', 0);

停止語の削除

DELETE文を使用してinnodb_ft_default_stopwordテーブルから停止語を削除できます。

DELETE FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD
WHERE STOPWORD = 'example';

注意事項

  • 停止語を変更する前に、既存のFULLTEXTインデックスへの影響を考慮する必要があります。

この解説が、MariaDBにおけるInformation Schema INNODB_FT_DEFAULT_STOPWORDテーブルの理解とプログラミングに役立つことを願っています。

  • この解説は、MariaDB 10.5を対象としています。他のバージョンでは、テーブル構造やシステム変数が異なる場合があります。


SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD;
SET innodb_ft_set_stopwords = 'AND, OR, NOT, BY, FOR, TO, IN, ON, AT, WITH, AS, OF, FROM';
ALTER TABLE INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD
INSERT VALUES (NULL, 'example', 0);

停止語の削除

DELETE FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD
WHERE STOPWORD = 'example';

特定の列を含むすべてのFULLTEXTインデックスを持つテーブルを検索

SELECT TABLE_NAME, INDEX_NAME
FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE
WHERE COLUMN_NAME LIKE '%column_name%';

特定のテーブルのFULLTEXTインデックスで使用されている停止語を検索

SELECT STOPWORD
FROM INFORMATION_SCHEMA.INNODB_FT_DEFAULT_STOPWORD
WHERE ID IN (
  SELECT STOPWORD_ID
  FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE
  WHERE TABLE_NAME = 'table_name'
);

システム変数 innodb_ft_min_word_len と innodb_ft_max_word_len の値を変更

SET innodb_ft_min_word_len = 3;
SET innodb_ft_max_word_len = 15;

FULLTEXTインデックス付きの列で始まるクエリを実行

SELECT * FROM mytable
WHERE MATCH (column_name) AGAINST ('search term');
SELECT * FROM mytable
WHERE MATCH (column_name) AGAINST ('search term') IN BOOLEAN MODE;
SELECT * FROM mytable
WHERE MATCH (column_name) AGAINST ('*search term*') IN NATURAL LANGUAGE MODE;


"Information Schema INNODB_FT_DEFAULT_STOPWORD Table"の代替方法

Information Schema INNODB_FT_DEFAULT_STOPWORDテーブルは、MariaDBにおける全文検索においてデフォルトの停止語リストを格納する便利なツールですが、状況によっては代替手段が必要になる場合があります。代替方法としては、以下のような方法が考えられます。

カスタム停止語リストファイルの使用

innodb_ft_set_stopwords_fileシステム変数を使用して、カスタムの停止語リストファイルを指定できます。この方法により、より柔軟な停止語リストの管理が可能になります。

SET innodb_ft_set_stopwords_file = '/path/to/stopwords.txt';

FULLTEXTオプションの使用

FULLTEXTインデックスを作成する際に、STOPWORDSオプションを使用して停止語リストを直接指定できます。この方法により、テーブルごとに個別の停止語リストを設定することができます。

例:FULLTEXTオプションによる停止語リストの指定

CREATE FULLTEXT INDEX my_index ON mytable (column_name)
  STOPWORDS = 'AND OR NOT BY FOR TO IN ON AT WITH AS OF FROM';

独自の停止語リストロジックの実装

アプリケーションロジックを使用して、独自の停止語リスト処理を実装することもできます。この方法により、高度な停止語処理が可能になりますが、プログラミングスキルが必要となります。

代替方法の選択

上記で紹介した代替方法はそれぞれ長所と短所があります。最適な方法は、以下の要素を考慮して選択する必要があります。

  • 必要な停止語リストの柔軟性
  • プログラミングスキル
  • アプリケーションの複雑性