MySQL+Sennaによる日本語全文検索ソリューション - SCS 住商情報システム株式会社
{img:SCS住商情報システム株式会社}[=>]
{img:SCSホームへ戻る}[=>]
{img:English}[=>]
{img:サイトマップ}[=>]
  {img:ニュース&トピックス}[=>]
{img:セミナー&展示会}[=>]
{img:製品・サービス}[=>]
{img:IR情報}[=>]
{img:採用情報}[=>]
{img:会社情報}[=>]
HOME[=>]
> 製品・サービス[=>]
> MySQL[=>]
> 全文検索ソリューション {img:MySQL} {img:MySQL / senna}

MySQL+Sennaによる日本語全文検索ソリューション


 

1.全文検索とは

  全文検索とは特定のキーワードを含むテキストを、インデックスを使用して検索することです。RDBMSにおいて一般的に使用されるBtreeインデックスは、ID、名前、商品名、日付といった主にデータ長の短いカラムにおいて使用されますが、全文検索に使用するFULLTEXTインデックスは商品の説明文、Eメールの本文といった長いテキストを格納しているカラムに対して使用されます。 長いテキストを格納しているテーブルから特定のキーワードを含むテキストを検索するには、通常の検索と同様に以下のようなSQL文を実行することで、検索することも可能です。 SELECTcolumnFROMtableWHEREcolumnLIKE‘%key_word%’; しかしながら、このような部分一致検索の場合には、インデックスを使用した検索ができず、検索速度が遅くなってしまいます。百科事典を巻末の索引を使用せずに、1ページ目から順番に読んでいくようなものです。 一方、以下のようなSQL文を実行する全文検索においては、FULLTEXTインデックスを使用した検索ができる為、非常に高速です。 SELECTcolumnFROMtableWHEREMATCH(column)AGAINST(‘hoge’);

  ▲ページ上部へ▲[=>]
 

2.MySQLにおける全文検索の問題点

  現在、MySQLには日本語環境で使用するための十分な全文検索機能が実装されていません。 例えば英語の場合、以下のように全文検索をすることができますが [test]>SETNAMESutf8;
QueryOK,0rowsaffected(0.00sec)

[test]>CREATETABLEt1(c1TEXT,FULLTEXT
ULTCHARSETutf8;
QueryOK,0rowsaffected(0.00sec)

[test]>INSERTINTOt1VALUES("Ihaveapen."),("MayIHelpYou?"),("Haveaniceday.");
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
[test] > SELECT * FROM t1 WHERE MATCH(c1) AGAINST("nice");
+------------------+
| c1 |
+------------------+
| Have a nice day. |
+------------------+
1 row in set (0.00 sec) 日本語の場合、結果が0 件になってしまいます。 [test] > drop table t1;
Query OK, 0 rows affected (0.00 sec)

[test] > CREATE TABLE t1 (c1 TEXT, FULLTEXT INDEX idx (c1)) ENGINE = MyISAM DEFAULT CHARSET utf8;
Query OK, 0 rows affected (0.00 sec)

[test] > INSERT INTO t1 VALUES("私はペンを持っています。"), ("いらっしゃいませ〜"), ("良い一日を。");
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0

[test] > SELECT * FROM t1 WHERE
Next Page
Full Browser

ja.abc-yoga.podzone.org | Contact