FULLTEXTインデックスをシングルカラムに付けたテーブルを作成して検索してみる。
FULLTEXTは2つ作成し、それぞれ別々の列に作成。

single_column_ft

CREATE TABLE `T_FULLTEXT` (
id int UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title varchar(100) NOT NULL,
body varchar(45) NOT NULL,
FULLTEXT (title),
FULLTEXT (body)
) ENGINE=MYISAM DEFAULT CHARSET=utf8;


INSERT INTO T_FULLTEXT (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. MSSQL','In the following database comparison ...'),
('DBMS and MYSQL','MYSQL is Open Source database ...'),
('MySQL Security','When configured properly, MySQL ...');

single_column_ft_result

————————————————————————-
[制限事項など] ↓
————————————————————————-

50_percent

この例で、「MySQL」という言葉は少なくとも 50 % の行で提示されているため、
検索結果は空になります。このように,この言葉は効果的にストップワードとして扱われます。
大きなデータセットでは、これは最も望ましい動作です : 自然言語のクエリは、1GB テーブルの
毎 2 行目は戻さないようになっています。
小さなデータセットにとっては、これはあまり望ましい動作ではありません。

テーブルの行の半分にマッチする言葉は、関連のある資料を見つけるのに適しません。
事実、関連のないものも大量に検出されるでしょう。これはインターネットのサーチエンジン
での検索と同じ論理です。このため、この言葉を含む行は、この特定のデータセットにおいて
語義の値が低く定められています。あるデータセットでは、提示された単語が 50% の
境界値を越えても、他のデータセットではまた異なります。

50% の境界値は、全文検索を行うとその重要性が明らかになります : テーブルを作成し、
テキストの 1 行または 2 行のみをインサートしてみると、テキストのすべての単語は
少なくとも 50% の行に存在することが分かります。そのため、検出結果は検出されません。
少なくとも 3 行以上をインサートするようにしてください。

確かめる為に”MYSQL”という言葉を含まないデータを全体の50%以上Insertしてみて、
再度”MYSQL”という文言を含むデータを検索してみた。結果は全て表示されるようになった。

50_percent_rule

* 単語のあるものは、全文検索では無視されます :
* 短すぎる単語は無視されます。全文検索で検出される言葉で最も短いものは 4 文字です。
* ストップワード リストにある言葉は無視されます。ストップワードは 「the」 や 「some」 などの常用語で、
語義の値はゼロとされています。すでに組み込まれているストップワードのリストがありますが、
ユーザ定義リストで書き換えることができます。

11.7. 全文検索関数
11.7.3. 全文ストップワード
11.7.5. 微調整 MySQL 全文検索

Comments are closed.

Post Navigation