MySWL×SCSK

MySQL ClusterをはじめとするHAソリューションなど、
SCSKが最先端の技術力でソリューションを提供します

電話でのお問い合わせは0800-500-4000(平日9:00?18:00) 見積依頼 資料ダウンロードはこちら

製品

MySQL+Sennaによる日本語全文検索

SCSKでは、MySQLとSennaを組み合わせたオリジナル全文検索ソリューションを開発しました。

MySQL+Senna=日本語全文検索

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

1.全文検索とは

全文検索とは特定のキーワードを含むテキストを、インデックスを使用して検索することです。RDBMSにおいて一般的に使用されるBtreeインデックスは、ID、名前、商品名、日付といった主にデータ長の短いカラムにおいて使用されますが、全文検索に使用するFULLTEXTインデックスは商品の説明文、Eメールの本文といった長いテキストを格納しているカラムに対して使用されます。

長いテキストを格納しているテーブルから特定のキーワードを含むテキストを検索するには、通常の検索と同様に以下のようなSQL文を実行することで、検索することも可能です。

SELECT column FROM table WHERE column LIKE '%key_word%';

しかしながら、このような部分一致検索の場合には、インデックスを使用した検索ができず、検索速度が遅くなってしまいます。百科事典を巻末の索引を使用せずに、1ページ目から順番に読んでいくようなものです。

一方、以下のようなSQL文を実行する全文検索においては、FULLTEXTインデックスを使用した検索ができる為、非常に高速です。

SELECT column FROM table WHERE MATCH(column) AGAINST('hoge');

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

現在、MySQLには日本語環境で使用するための十分な全文検索機能が実装されていません。

例えば英語の場合、以下のように全文検索をすることができますが

[test]>SET NAMES utf8;
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("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 MATCH(c1) AGAINST("良い");
Empty set (0.00 sec)

なぜこのようなことが起きるかというと、これはMySQLの全文検索(FULLTEXT)インデックスのキーワード抽出を行うパーサが「半角スペースで区切られているものをキーワードとして認識する」という実装になっているためです。欧米の言語は通常、単語と単語の間は半角スペースで区切られていますので機能しますが、日本語の場合はそうではないためキーワードの抽出を行えません。

例えば、「私はペンを持っています。」を例にすると、あらかじめ「私は ペンを 持って いま す。」のように半角スペースで区切っておけば(分かち書きと言います)現在のMySQLでも日本語全文検索を行うことができます。しかしMySQLに入力するデータをあらかじめ分かち書きするのは、その分処理が増えるのでできれば避けたいですし、オリジナルのデータと別に分かち書きしたデータを用意しなければならないのは効率が良くありません。

3. MySQL+Senna による日本語全文検索

このような問題点はMySQL+Sennaの組み合わせで、解決することができます。
Sennaとはオープンソースの全文検索エンジンです。Sennaを使用することで、全文検索インデックスのキーワード抽出にあたって、形態素解析(mecabを使用)やn-gramといった手法が使用できる為、MySQLにおいても日本語のテキストに対して有効なインデックスを作成することが可能となります。

加えて、Sennaは以下の様な特徴を持っています。

組込み型

MySQLに組み込んで使用する為、MySQLがアプリケーションからSennaを隠蔽します。開発者の方はSQL文を操作するだけで、全文検索を実行できます。

高速

キーワードがテキスト内のどの位置にあるかという位置情報を持った、完全転置インデックスを採用している為、フレーズ検索においても高速な検索が可能です

即時検索

作成したインデックスに対して、インクリメンタルに文書の追加/変更/削除の操作を加えることができるため、文書に次々と変更が加えられる場合にも、一度作成したインデックスを作成し直す必要がありません。

MySQLにSennaを組み込むには、MySQLのソースコードにパッチをあて、修正を加える必要があります。これにより、FULLTEXTインデックスの処理にMyISAMのビルトインのFULLTEXTインデックスではなく、Sennaを使うようになります。MySQLにSennaを組み込んだ場合のSennaの位置づけは以下の図の様なイメージとなります。

senna_img01.gif

4. Tritonn プロジェクト

Tritonnとは、MySQLに全文検索エンジンのSennaを組み込むためのパッチ(以下、MySQL バインディングパッチ)を開発する、オープンソースプロジェクトです。従来MySQL バインディングパッチは、Senna プロジェクトによって提供され てきましたが、2007年3月よりSennaのサブプロジェクト"Tritonn"として独立して開発、管理されています。また、MySQL+Sennaを実現するTritonnの使用方法についても詳しく解説されています。

構造化データと非構造化データ

構造化データ

  • 注文番号や商品名といった区分化されている情報のこと。
  • B-treeインデックス、Hashインデックス等のデータベースの索引で高速な処理が可能。

非構造化データ

  • 文書データなど区分化されていない情報のこと。
    (説明文、掲示板、コメント、ドキュメント等)
  • 通常のデータベースの索引では対応できない。
  • 高速に処理するためには全文検索技術が必要。

MySQL+Sennaによる全文検索技術が必要とされる背景

社会全体でのシステム利用者の増大により非構造化データが増大
  ↓
データベース内に蓄積された非構造データの活用が必要に
  ↓
MySQL+Sennaによる全文検索ソリューションでデータ活用の実現

MySQL+Senna

  • MySQLに全文検索エンジンSennaを組み込んだバイナリをSCSKが開発・リリース
  • ベンダーによるバイナリ認定取得済み、有償サポートを提供
  • 国内企業での採用実績多数、OEMサポートも提供実績有
  • gosann
  • http://qwik.jp/senna
  • http://qwik.jp/tritonn

MySQL + Mroonga

Mroongaとは

Sennaの後継プロダクトとして、高速・高精度な全文検索エンジンであるGroongaが開発されています。
Mroongaは、GroongaをベースとしたMySQLのストレージエンジンです。Tritonnプロジェクトの後継となるため、Sennaに比べてより高速な全文検索が可能です。
Mroongaについては、http://mroonga.org/ja/もご参照ください。

MySQL + Mroonga技術サポート

SCSKは、これまで提供しておりましたMySQL+Sennaサポートに加えて、MySQL+Mroongaサポートを提供いたします。サポート内容の概要は以下の通りです。

  • MySQL/Mroonga/Groongaについて製品サポート及び技術サポートを提供
    ※サポートの対象となるのはMySQL+Mroonga構成のみ
  • 販売単位は「1サーバ/年」

詳細につきましては、ページ下部のフォームより是非お問い合わせください。


SCSKだから選ばれる

10年以上にわたるMySQLの取り組み

10年以上にわたるMySQLの取り組み

MySQLオフィシャルトレーニングを多数担当。日本オラクル社のパートナー認定制度「MySQL Specialization」国内第1号取得。オリジナル全文検索ソリューション開発

SCSKの強み

SCSKの強み

オフィシャルトレーニング資格を有する技術者が提供する高い技術力。大規模通信系システム、大規模基幹系システムなども経験。国内企業数百社に対する導入実績。MySQLに関連する全てのサービスをワンストップで提供

お問い合わせ

MySQLやMySQL関連ソリューションに関するお問い合わせ、資料請求、お見積、ご相談などございましたら、こちらよりご連絡下さいませ。

お問い合わせ資料ダウンロード見積依頼

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。