MariaDBで全文検索の精度とパフォーマンスを向上させる: INNODB_FT_DEFAULT_STOPWORD テーブルの活用

2024-04-02

MariaDB の Information Schema INNODB_FT_DEFAULT_STOPWORD テーブルは、全文検索インデックスで使用されるデフォルトのストップワードのリストを格納します。ストップワードとは、検索クエリで除外される単語のことです。

テーブル構成

カラム名データ型説明
WORDVARCHAR(255)ストップワード

ストップワードは、検索結果の精度向上とインデックスのパフォーマンス改善に役立ちます。

  • 精度向上:検索クエリから不要な単語を除外することで、より関連性の高い結果を取得できます。
  • パフォーマンス改善:インデックスサイズを小さくすることで、検索処理速度を向上できます。

デフォルトのストップワード

MariaDB のデフォルトのストップワードリストは、英語の一般的な機能語で構成されています。

a, an, and, are, as, at, be, by, for, from, had, has, have, he, her, his, in, is, it, its, of, on, or, that, the, to, was, were, will, with

ストップワードの追加・削除

INNODB_FT_DEFAULT_STOPWORD テーブルに直接 INSERT や DELETE を実行することで、ストップワードの追加・削除ができます。

例:ストップワード "the" の追加

INSERT INTO INNODB_FT_DEFAULT_STOPWORD (WORD) VALUES ('the');

例:ストップワード "and" の削除

DELETE FROM INNODB_FT_DEFAULT_STOPWORD WHERE WORD = 'and';

注意事項

  • ストップワードの追加・削除は、全文検索インデックスのパフォーマンスに影響を与える可能性があります。
  • ストップワードの追加・削除を行う前に、MariaDB のドキュメントを参照することを推奨します。

補足

  • 上記の解説は、MariaDB 10.5.13 を基にしています。
  • MariaDB のバージョンによって、テーブル構成やデフォルトのストップワードリストが異なる場合があります。
  • この情報は参考用であり、予告なく変更される可能性があります。
  • この情報に基づいて行ういかなる損害についても、責任を負いません。

改善点

  • 日本語のストップワードリストを追加しました。
  • ストップワードの役割について詳しく説明しました。
  • MariaDB のバージョンによる違いについて注意喚起を行いました。


MariaDB Information Schema INNODB_FT_DEFAULT_STOPWORD テーブル サンプルコード

SELECT * FROM information_schema.INNODB_FT_DEFAULT_STOPWORD;

特定のストップワードの存在確認

SELECT EXISTS (
    SELECT 1 FROM information_schema.INNODB_FT_DEFAULT_STOPWORD
    WHERE WORD = 'the'
);

ストップワード "the" の追加

INSERT INTO information_schema.INNODB_FT_DEFAULT_STOPWORD (WORD) VALUES ('the');

ストップワード "and" の削除

DELETE FROM information_schema.INNODB_FT_DEFAULT_STOPWORD WHERE WORD = 'and';

ストップワード "a" と "an" の追加、その後 "a" の削除

BEGIN;

INSERT INTO information_schema.INNODB_FT_DEFAULT_STOPWORD (WORD) VALUES ('a'), ('an');
DELETE FROM information_schema.INNODB_FT_DEFAULT_STOPWORD WHERE WORD = 'a';

COMMIT;

全文検索クエリにおけるストップワードの影響

-- ストップワード "the" が存在する場合
SELECT * FROM documents WHERE MATCH (title) AGAINST ('the quick brown fox');

-- ストップワード "the" を削除した後
DELETE FROM information_schema.INNODB_FT_DEFAULT_STOPWORD WHERE WORD = 'the';
SELECT * FROM documents WHERE MATCH (title) AGAINST ('the quick brown fox');

日本語ストップワードの追加

-- 日本語ストップワードリスト
SET @stopwords = 'の、は、が、を、に、へ、で、と、から、は、は';

-- ストップワードリストを分割して INSERT
INSERT INTO information_schema.INNODB_FT_DEFAULT_STOPWORD (WORD)
SELECT TRIM(word) FROM UNNEST(SPLIT(@stopwords, ',')) AS word;

全文検索クエリにおける日本語ストップワードの影響

-- 日本語ストップワード "は" が存在する場合
SELECT * FROM documents_ja WHERE MATCH (title) AGAINST ('これはテストです');

-- 日本語ストップワード "は" を削除した後
DELETE FROM information_schema.INNODB_FT_DEFAULT_STOPWORD WHERE WORD = 'は';
SELECT * FROM documents_ja WHERE MATCH (title) AGAINST ('これはテストです');


MariaDB Information Schema INNODB_FT_DEFAULT_STOPWORD テーブル操作の他の方法

MySQL Workbench は、MariaDB を含む MySQL データベースを管理するためのグラフィカルツールです。

  • MySQL Workbench を起動し、接続したいデータベースに接続します。
  • Schema タブで Information Schema を選択します。
  • Tables フォルダで INNODB_FT_DEFAULT_STOPWORD テーブルを選択します。
  • テーブルデータの編集、追加、削除を行うことができます。

mysqldump と mysqlimport を使用

mysqldump コマンドを使用して INNODB_FT_DEFAULT_STOPWORD テーブルをダンプし、mysqlimport コマンドを使用して別のデータベースにインポートすることができます。

例:INNODB_FT_DEFAULT_STOPWORD テーブルを別のデータベースにインポート

mysqldump -u root -p database_name information_schema.INNODB_FT_DEFAULT_STOPWORD > stopwords.sql
mysqlimport -u root -p target_database_name stopwords.sql

ストップワードリストファイルを直接編集

MariaDB のインストールフォルダにある share/mysql/stopwords.txt ファイルは、デフォルトのストップワードリストを格納しています。

このファイルを直接編集することで、デフォルトのストップワードリストを変更することができます。

注意事項

  • ファイル編集を行う前に、必ずバックアップを取ってください。
  • ファイル編集後、MariaDB サーバを再起動する必要があります。

自作のプログラムを使用

JDBC や Python の MySQLdb などのライブラリを使用して、独自のプログラムを作成して INNODB_FT_DEFAULT_STOPWORD テーブルを操作することができます。




MariaDB の Data Types における SET CHARACTER SET の徹底解説

文字コード: 文字をコンピュータ上で表現するための規則。UTF-8、latin1 など様々な種類が存在します。照合順序: 文字列の比較方法を定義。文字コード内でどの文字がどのように並ぶかを決定します。SET CHARACTER SET は、以下の役割を担います。



データベースで文字列を扱う!MariaDBの文字列データ型を徹底解説

MariaDB には、文字列データを格納するために使用できるいくつかのデータ型があります。それぞれのデータ型には、長所と短所があり、使用するデータ型は、格納するデータと、そのデータにどのようにアクセスするかによって異なります。MariaDB における主な文字列データ型は以下の通りです:


MariaDB の SET データ型:使いこなしてデータ管理を効率化

MariaDB の SET データ型は、複数の値をカンマ区切りで格納できる特殊なデータ型です。選択肢の集合を表す場合などに役立ちます。特徴最大64個の値を格納可能値は 文字列 または 数値格納順序は 保持されない重複した値は 許可されないNULL 値を格納可能


MariaDB INTEGER データ型:プログラミング解説

定義: 符号付き整数値を格納するためのデータ型範囲: -2147483648 から 2147483647 まで (32ビット)デフォルト: 多くの場合、INT は INTEGER のエイリアスとして使用用途: 主に、以下の用途で使用 カウント、ID 番号、数量など、整数値を扱うカラム 外部キー


MariaDB の SQL ステートメントと構造における "~" のすべて

パターンマッチは、文字列やテキストデータの一部と一致するかどうかを判断するために使用されます。 "~" は、パターンマッチで使用されるワイルドカード文字です。 以下の例では、LIKE 演算子と組み合わせて、名前が "A" で始まる顧客を検索しています。



アプリケーション開発におけるタイムゾーンと leap second: MariaDB の mysql.time_zone_leap_second テーブル

mysql. time_zone_leap_second テーブルは、MariaDB 10. 4 以降で導入されたテーブルで、協定世界時 (UTC) に挿入されるうるう秒に関する情報を格納します。うるう秒は、地球の自転速度の減速を補うために、UTC に定期的に挿入される 1 秒です。


SQL Statements & Structure でマスターする MariaDB の集計関数

MariaDB では、様々な集計関数が用意されています。 以下は、最もよく使用される代表的な関数です。1 数値データの集計SUM(): 列のすべての値の合計を計算します。AVG(): 列のすべての値の平均値を計算します。MAX(): 列の最大値を取得します。


MariaDB の INNODB_METRICS テーブルでデータベースのパフォーマンスを理解・最適化する

このテーブルは、InnoDB の内部動作を理解し、パフォーマンスボトルネックを特定し、データベースのパフォーマンスを最適化するのに役立ちます。テーブル構造INNODB_METRICS テーブルには、以下の列が含まれます。NAME: カウンターの一意の名前です。


複数の条件に基づいて最大値を取得する:GREATEST 関数と CASE 式

MariaDB の GREATEST 関数は、複数の値の中で最大の値を取得します。これは、数値、文字列、日付、時間など、さまざまなデータ型で使用できます。構文expr1, expr2, ..., exprN: 比較する値のリスト。最大 64 個の式を指定できます。


MariaDB INTEGER データ型:プログラミング解説

定義: 符号付き整数値を格納するためのデータ型範囲: -2147483648 から 2147483647 まで (32ビット)デフォルト: 多くの場合、INT は INTEGER のエイリアスとして使用用途: 主に、以下の用途で使用 カウント、ID 番号、数量など、整数値を扱うカラム 外部キー