もっとGroongaを知ってもらおう!ということで週刊Groongaをはじめました。毎週木曜にGroongaやMroonga、Rroongaのトピックを投稿予定です。
今年も11/29に全文検索エンジンGroongaを囲む夕べ4を開催しました。発表資料へのリンクもまとめています。隔週連載Groongaも参考になりますよ。
はじめに
MySQLで高速に全文検索するためのオープンソースのストレージエンジンとしてMroongaを公開しています。
最新のバージョンは2013年11月29日にリリースした3.10です。
今回は、Mroongaでマッチさせるときの演算子の既定値を指定する方法を紹介します。
演算子の既定値を指定するDプラグマ
Mroongaでは2011年10月29日にリリースされた1.0.1から演算子の既定値を指定するためのDプラグマに対応しています。
Mroongaで使えるSQLコマンドでは、一覧にあるのみなので、どういうものかを紹介してみることにしました。
これはTritonnのDプラグマに由来していてSennaのクエリーの書式に解説があります。
Dプラグマで使える演算子
Dプラグマでは以下の3つの演算子が使えます。
+
-
OR
+
演算子
指定した語句を含むテキストを検索します。
-
演算子
指定した語句を含まないテキストを検索します。
OR
演算子
指定した語句のいずれかを含むテキストを検索します。
Dプラグマのサンプル
例えば、本にコメントをつけているときのことを考えてみましょう。
books
テーブルがあって、books
テーブルにはタイトルを保持する title
カラムとコメントを記録するための comment
カラムがあるとします。
サンプルのスキーマ定義は以下のようになるでしょう。
CREATE TABLE books (
`id` INTEGER AUTO_INCREMENT,
`title` text,
`comment` text,
PRIMARY KEY(`id`),
FULLTEXT INDEX content_index (title, comment)
) engine=mroonga default charset utf8;
上記サンプルのためのサンプルデータを用意します。
INSERT INTO books (title, comment) VALUES ('Groonga入門', 'Groongaの初歩的な内容のみ。');
INSERT INTO books (title, comment) VALUES ('Mroonga入門', 'Mroongaの初歩的な内容のみ。Groongaについても触れている。');
INSERT INTO books (title, comment) VALUES ('実践Groonga - Groonga入門の次のステップ', '入門を卒業したら読む本。');
INSERT INTO books (title, comment) VALUES ('実践Rroonga', '入門の次に読むべき本。すぐに使える実践的な内容が売り。');
INSERT INTO books (title, comment) VALUES ('Mroongaのレシピ', '入門の次に読むべき実践的な本');
INSERT INTO books (title, comment) VALUES ('Groongaのレシピ', 'いわゆるレシピブック。');
title
もしくはcomment
カラムからGroongaを検索してみましょう。
SELECT * FROM books WHERE MATCH (title,comment) AGAINST ('+groonga' IN BOOLEAN MODE) ORDER BY id\G
この結果は以下のようになります。
mysql> SELECT * FROM books WHERE MATCH (title,comment) AGAINST ('+groonga' IN BOOLEAN MODE) ORDER BY id\G
*************************** 1. row ***************************
id: 1
title: Groonga入門
comment: Groongaの初歩的な内容のみ。
*************************** 2. row ***************************
id: 2
title: Mroonga入門
comment: Mroongaの初歩的な内容のみ。Groongaについても触れている。
*************************** 3. row ***************************
id: 3
title: 実践Groonga - Groonga入門の次のステップ
comment: 入門を卒業したら読む本。
*************************** 4. row ***************************
id: 6
title: Groongaのレシピ
comment: いわゆるレシピブック。
4 rows in set (0.00 sec)
Groongaもしくは、Mroongaを含む場合を検索してみるとクエリはこんな感じになるでしょう。
SELECT * FROM books WHERE MATCH (title,comment) AGAINST ('+groonga' IN BOOLEAN MODE) OR MATCH(title,comment) AGAINST ('+mroonga') ORDER BY id\G
この結果は以下のようになります。
*************************** 1. row ***************************
id: 1
title: Groonga入門
comment: Groongaの初歩的な内容のみ。
*************************** 2. row ***************************
id: 2
title: Mroonga入門
comment: Mroongaの初歩的な内容のみ。Groongaについても触れている。
*************************** 3. row ***************************
id: 3
title: 実践Groonga - Groonga入門の次のステップ
comment: 入門を卒業したら読む本。
*************************** 4. row ***************************
id: 5
title: Mroongaのレシピ
comment: 入門の次に読むべき実践的な本
*************************** 5. row ***************************
id: 6
title: Groongaのレシピ
comment: いわゆるレシピブック。
5 rows in set (0.00 sec)
さきほどのクエリは、Dプラグマを使うとこんな風にすっきり書けます。
SELECT * FROM books WHERE MATCH (title,comment) AGAINST ('*DOR groonga mroonga' IN BOOLEAN MODE) ORDER BY id\G
*D+
の場合は'+groonga +mroonga'と等価だったりするので、あんまりDプラグマを利用するメリットはないかも知れません。
まとめ
今回は、Mroongaの演算子の既定値を指定するDプラグマを紹介しました。
Mroongaに興味を持ったなら、まずはインストールして試してみてください。
Mroongaの基本的な動作を知るためのユーザガイドもあります。インストールしたら試してみてください。