mroonga - MySQLで高速に全文検索するためのオープンソースのストレージエンジン

4. リファレンス

4.1. 利用可能なSQLコマンドの一覧

  • ALTER TABLE table_name ADD COLUMN column_name TEXT
  • ALTER TABLE table_name ADD FULLTEXT INDEX index_name (column_name)
  • ALTER TABLE table_name ADD SPATIAL KEY index_name (geometry_column_name)
  • ALTER TABLE table_name ENGINE = mroonga
  • ALTER TABLE table_name RENAME new_table_name
  • COMMIT
  • CREATE FULLTEXT INDEX index_name ON table_name(column_name)
  • CREATE FULLTEXT INDEX index_name ON table_name(column_name, ...)
  • CREATE TABLE \`table-name-with-hyphen\` (...)
  • CREATE TABLE table_name (... FULLTEXT INDEX index_name (column_name) COMMENT 'parser "TokenMecab"')
  • CREATE TABLE table_name (... FULLTEXT INDEX index_name (column_name))
  • CREATE TABLE table_name (... FULLTEXT INDEX index_name (column_name, ...))
  • CREATE TABLE table_name (... INDEX (column_name))
  • CREATE TABLE table_name (... INDEX (column_name, ...))
  • CREATE TABLE table_name (... INDEX USING BTREE (column_name))
  • CREATE TABLE table_name (... PRIMARY KEY (column_name))
  • CREATE TABLE table_name (...) CAHRSET UTF8
  • CREATE TABLE table_name (...) ENGINE=mroonga COMMENT = 'ENGINE "InnoDB"'
  • CREATE TABLE table_name (...) ENGINE=mroonga
  • CREATE TABLE table_name (\`_id\` INT)
  • CREATE TABLE table_name (\`_id\` INT, KEY(_id) USING HASH)
  • CREATE TABLE table_name (column_name BIGINT)
  • CREATE TABLE table_name (column_name BINARY(...))
  • CREATE TABLE table_name (column_name BIT)
  • CREATE TABLE table_name (column_name BLOB)
  • CREATE TABLE table_name (column_name CHAR(...))
  • CREATE TABLE table_name (column_name DATE)
  • CREATE TABLE table_name (column_name DATETIME)
  • CREATE TABLE table_name (column_name DECIMAL)
  • CREATE TABLE table_name (column_name DOUBLE)
  • CREATE TABLE table_name (column_name ENUM(...))
  • CREATE TABLE table_name (column_name FLOAT)
  • CREATE TABLE table_name (column_name GEOMETRY NOT NULL)
  • CREATE TABLE table_name (column_name INT UNSIGNED)
  • CREATE TABLE table_name (column_name INT)
  • CREATE TABLE table_name (column_name LONGBLOB)
  • CREATE TABLE table_name (column_name LONGTEXT)
  • CREATE TABLE table_name (column_name MEDIUMBLOB)
  • CREATE TABLE table_name (column_name MEDIUMINT)
  • CREATE TABLE table_name (column_name MEDIUMTEXT)
  • CREATE TABLE table_name (column_name SET(...))
  • CREATE TABLE table_name (column_name SMALLINT)
  • CREATE TABLE table_name (column_name TEXT)
  • CREATE TABLE table_name (column_name TIME)
  • CREATE TABLE table_name (column_name TIMESTAMP)
  • CREATE TABLE table_name (column_name TINYBLOB)
  • CREATE TABLE table_name (column_name TINYINT)
  • CREATE TABLE table_name (column_name TINYTEXT)
  • CREATE TABLE table_name (column_name VARBINARY(...))
  • CREATE TABLE table_name (column_name VARCHAR(...))
  • CREATE TABLE table_name (column_name YEAR)
  • CREATE TABLE table_name (column_name INT AUTO_INCREMENT)
  • CREATE TABLE table_name (column_name INT PRIMARY KEY)
  • CREATE TABLE table_name (column_name DATE PRIMARY KEY)
  • CREATE TABLE table_name (column_name DATETIME PRIMARY KEY)
  • CREATE TABLE table_name (column_name DATETIME(fractional_seconds_precision) PRIMARY KEY)
  • CREATE TABLE table_name (column_name DECIMAL PRIMARY KEY)
  • CREATE TABLE table_name (column_name DECIMAL(maximum_number_digits, fractional_seconds_precision) PRIMARY KEY)
  • CREATE TABLE table_name (column_name TIME PRIMARY KEY)
  • CREATE TABLE table_name (column_name TIME(fractional_seconds_precision) PRIMARY KEY)
  • CREATE TABLE table_name (column_name TIMESTAMP PRIMARY KEY)
  • CREATE TABLE table_name (column_name TIMESTAMP(fractional_seconds_precision) PRIMARY KEY)
  • CREATE TABLE table_name (column_name YEAR PRIMARY KEY)
  • CREATE TABLE table_name (column_name1 INT, column_name2 ..., KEY (column_name1, column_name2))
  • CREATE TABLE table_name (column_name1 DOUBLE, column_name2 ..., KEY (column_name1, column_name2))
  • CREATE TABLE table_name (column_name1 FLOAT, column_name2 ..., KEY (column_name1, column_name2))
  • CREATE TABLE table_name (column_name1 CHAR(...), column_name2 ..., KEY (column_name1, column_name2))
  • CREATE TABLE table_name (column_name1 VARCHAR(...), column_name2 ..., KEY (column_name1, column_name2))
  • CREATE TEMPORARY TABLE table_name (...)
  • DELETE FROM table_name WHERE ...
  • DROP INDEX column_name ON table_name
  • DROP TABLE IF EXISTS table_name, ...
  • DROP TABLE \`table-name-with-hyphen\`, ...
  • DROP TABLE table_name, ...
  • DROP TEMPORARY TABLE table_name
  • FLUSH LOGS
  • FLUSH TABLES
  • INSERT INTO (geometry_column_name) VALUES (GeomFromText('POINT(...)'))
  • INSERT INTO ... VALUES ...
  • INSERT INTO ... VALUES ... ON DUPLICATE KEY UPDATE ... (for PRIMARY KEY)
  • INSERT INTO ... VALUES ... ON DUPLICATE KEY UPDATE ... (for UNIQUE KEY)
  • INSERT INTO table_name (column_name, ...) SELECT ... FROM other_table_name
  • REPLACE INTO table_name SELECT ... FROM other_table_name ...
  • SELECT * FROM information_schema.plugins WHERE plugin_name = "mroonga"
  • SELECT * FROM table_name
  • SELECT * FROM table_name FORCE INDEX(index_name) WHERE ...
  • SELECT * FROM table_name ORDER BY column_name ASC LIMIT ...
  • SELECT * FROM table_name ORDER BY column_name ASC
  • SELECT * FROM table_name ORDER BY column_name DESC LIMIT ...
  • SELECT * FROM table_name ORDER BY column_name DESC
  • SELECT * FROM table_name ORDER BY column_name
  • SELECT * FROM table_name WHERE MATCH(column_name) AGAINST("*D+ word ..." IN BOOLEAN MODE)
  • SELECT * FROM table_name WHERE MATCH(column_name) AGAINST("*D- word ..." IN BOOLEAN MODE)
  • SELECT * FROM table_name WHERE MATCH(column_name) AGAINST("*DOR word ..." IN BOOLEAN MODE)
  • SELECT * FROM table_name WHERE MATCH(column_name) AGAINST("+word ..." IN BOOLEAN MODE)
  • SELECT * FROM table_name WHERE MATCH(column_name) AGAINST("..." IN BOOLEAN MODE)
  • SELECT * FROM table_name WHERE MATCH(column_name, ...) AGAINST("..." IN BOOLEAN MODE)
  • SELECT * FROM table_name WHERE MBRContains(GeomFromText('LineString(...)'), geometry_column_name)
  • SELECT * FROM table_name WHERE NOT MATCH(column_name) AGAINST("..." IN BOOLEAN MODE)
  • SELECT * FROM table_name WHERE column_name < ...
  • SELECT * FROM table_name WHERE column_name <= ...
  • SELECT * FROM table_name WHERE column_name = ...
  • SELECT * FROM table_name WHERE column_name > ...
  • SELECT * FROM table_name WHERE column_name >= ...
  • SELECT * FROM table_name WHERE column_name BETWEEN ... AND ...
  • SELECT * FROM table_name WHERE column_name IN (SELECT sub_column_name FROM sub_table_name WHERE MATCH(sub_text_column_name) AGAINST("..."))
  • SELECT *, MATCH(column_name) AGAINST("..." IN BOOLEAN MODE) FROM table_name WHERE MATCH(column_name) AGAINST("..." IN BOOLEAN MODE)
  • SELECT FOUND_ROWS()
  • SELECT SQL_CALC_FOUND_ROWS * FROM table_name WHERE MATCH(...) AGAINST("..." IN BOOLEAN MODE) ORDER BY column_name LIMIT start,n_records
  • SELECT last_insert_grn_id()
  • SET binlog_format="MIXED"
  • SET binlog_format="ROW"
  • SET binlog_format="STATEMENT"
  • TRUNCATE TABLE table_name
  • UPDATE table_name SET column_name = ...

4.2. 利用できないSQLコマンドの一覧

  • CREATE TABLE (...) CAHRSET not_utf8
  • INSERT INTO (geometry_column_name) VALUES (GeomFromText('LineString(...)'))
  • INSERT INTO (...) VALUES (null)
  • START TRANSACTION

4.3. リストにないSQLコマンドを見つけました

もし、あなたがリストにないSQLコマンドを見つけて、そのSQLコマンドが動くかどうかを確認した場合は、そのSQLコマンドをこのリストに追加させてください。そのSQLコマンドを 開発チーム に連絡してもらうか、 ソースファイル に対するパッチをGitHubでpull requestしてくれれば取り込みます!

4.4. サーバ変数の一覧

独自に追加されたサーバ変数を説明します。

4.4.1. mroonga_default_parser

デフォルトの全文検索用パーサ。デフォルト値はconfigureの with-default-parser オプションで指定できます(無指定時は TokenBigram )。

全文検索パーサーとして TokenBigramSplitSymbolAlphaDigit を使う例です。この例では body_index 全文検索インデックスは TokenBigramSplitSymbolAlphaDigit を使います。

1
2
3
4
5
6
SET GLOBAL mroonga_default_parser=TokenBigramSplitSymbolAlphaDigit;
CREATE TABLE diaries (
  id INT PRIMARY KEY AUTO_INCREMENT,
  body TEXT,
  FULLTEXT INDEX body_index (body)
) DEFAULT CHARSET UTF8;

4.4.2. mroonga_libgroonga_version

groongaライブラリのバージョン

groongaライブラリのバージョンを確認するためのSQL例です:

mysql> SHOW VARIABLES LIKE 'mroonga_libgroonga_version';
+----------------------------+------------------+
| Variable_name              | Value            |
+----------------------------+------------------+
| mroonga_libgroonga_version | 1.2.8-9-gbf05b82 |
+----------------------------+------------------+
1 row in set (0.00 sec)

4.4.3. mroonga_log_file

mroongaのログファイル名。デフォルト値は groonga.log

ログファイルを /tmp/mroonga.log に変更する例です:

mysql> SHOW VARIABLES LIKE 'mroonga_log_file';
+------------------+-------------+
| Variable_name    | Value       |
+------------------+-------------+
| mroonga_log_file | groonga.log |
+------------------+-------------+
1 row in set (0.00 sec)

mysql> SET GLOBAL mroonga_log_file = "/tmp/mroonga.log";
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'mroonga_log_file';
+------------------+------------------+
| Variable_name    | Value            |
+------------------+------------------+
| mroonga_log_file | /tmp/mroonga.log |
+------------------+------------------+
1 row in set (0.00 sec)

4.4.4. mroonga_log_level

mroongaのログの出力レベル。デフォルト値は NOTICE

ログレベルを DEBUG に変更する例です。 DEBUG レベルにするとデバッグ用のたくさんのメッセージがログに出力されます:

mysql> SHOW VARIABLES LIKE 'mroonga_log_level';
+-------------------+--------+
| Variable_name     | Value  |
+-------------------+--------+
| mroonga_log_level | NOTICE |
+-------------------+--------+
1 row in set (0.00 sec)

mysql> SET GLOBAL mroonga_log_level = "debug";
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'mroonga_log_level';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| mroonga_log_level | DEBUG |
+-------------------+-------+
1 row in set (0.00 sec)

4.4.5. mroonga_version

mroongaのバージョン

実行中のmroongaのバージョンを確認するためのSQL例です:

mysql> SHOW VARIABLES LIKE 'mroonga_version';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| mroonga_version | 1.10  |
+-----------------+-------+
1 row in set (0.00 sec)

4.4.6. mroonga_dry_write

groongaデータベースに実際にデータを書き込むかどうかを指定します。デフォルト値は OFF で、実際にgroongaデータベースにデータを書き込みます。通常はこの値を変更する必要はありません。この変数はベンチマーク時に便利です。この値を ON にすることでMySQLとmroongaだけの処理時間を計測することができます。この時間にgroongaの処理時間は含まれません。

groongaデータベースに値を書き込まないようにするSQLの例です:

mysql> SHOW VARIABLES LIKE 'mroonga_dry_write';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| mroonga_dry_write | OFF   |
+-------------------+-------+
1 row in set (0.00 sec)

mysql> SET mroonga_dry_write = true;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'mroonga_dry_write';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| mroonga_dry_write | ON    |
+-------------------+-------+
1 row in set (0.00 sec)

4.4.7. mroonga_enable_optimization

最適化を有効にするかどうかを指定します。デフォルト値は ON で最適化は有効になっています。通常はこの値を変更する必要はありません。この変数はベンチマーク時に便利です。

最適化を無効にするSQLの例です:

mysql> SHOW VARIABLES LIKE 'mroonga_enable_optimization';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| mroonga_enable_optimization | ON    |
+-----------------------------+-------+
1 row in set (0.00 sec)

mysql> SET mroonga_enable_optimization = false;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'mroonga_enable_optimization';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| mroonga_enable_optimization | OFF   |
+-----------------------------+-------+
1 row in set (0.00 sec)

4.4.8. mroonga_match_escalation_threshold

マッチ方法をエスカレーションするかどうかを決定する閾値です。マッチ方法については groongaの検索の仕様 を確認してください。

デフォルト値はgroongaのデフォルト値と同じです。デフォルトの設定でインストールした場合は0になります。この変数のスコープは「グローバル」と「セッション」の両方なので、my.cnfまたは SET GLOBAL mroonga_match_escalation_threshold = THRESHOLD; でデフォルト値を設定できます。

マッチ方法がエスカレーションするかどうかを決定する閾値として-1を使った例です。-1は絶対エスカレーションしないという意味です。

1
SET GLOBAL mroonga_match_escalation_threshold = -1;

この変数の値による挙動の変化を示す別の例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
CREATE TABLE diaries (
  id INT PRIMARY KEY AUTO_INCREMENT,
  title TEXT,
  tags TEXT,
  FULLTEXT INDEX tags_index (tags) COMMENT 'parser "TokenDelimit"'
) ENGINE=mroonga DEFAULT CHARSET=UTF8;

-- Test data
INSERT INTO diaries (title, tags) VALUES ("Hello groonga!", "groonga install");
INSERT INTO diaries (title, tags) VALUES ("Hello mroonga!", "mroonga install");

-- Matches all records that have "install" tag.
SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("install" IN BOOLEAN MODE);
-- id        title   tags
-- 1 Hello groonga!  groonga install
-- 2 Hello mroonga!  mroonga install

-- Matches no records by "gr" tag search because no "gr" tag is used.
-- But matches a record that has "groonga" tag because search
-- method is escalated and prefix search with "gr" is used.
-- The default threshold is 0. It means that no records are matched then
-- search method is escalated.
SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
-- id        title   tags
-- 1 Hello groonga!  groonga install

-- Disables escalation.
SET mroonga_match_escalation_threshold = -1;
-- No records are matched.
SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
-- id        title   tags

-- Enables escalation again.
SET mroonga_match_escalation_threshold = 0;
-- Matches a record by prefix search with "gr".
SELECT * FROM diaries WHERE MATCH (tags) AGAINST ("gr" IN BOOLEAN MODE);
-- id        title   tags
-- 1 Hello groonga!  groonga install

4.5. ステータス変数の一覧

独自に追加されたステータス変数を説明します。

4.5.1. mroonga_count_skip

行カウント高速化機能が動作する度にカウントアップされます。スキーマ/SQLチューニングを行って行カウント高速化機能を利用できるようにした際の動作確認に利用できます。

確認例です:

mysql> SHOW STATUS LIKE 'mroonga_count_skip';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| mroonga_count_skip | 0     |
+--------------------+-------+
1 row in set (0.00 sec)

4.5.2. mroonga_fast_order_limit

ORDER BY LIMIT 高速化機能が動作する度にカウントアップされます。スキーマ/SQLチューニングを行って ORDER BY LIMIT 高速化機能を利用できるようにした際の動作確認に利用できます。

確認例です:

mysql> SHOW STATUS LIKE 'mroonga_fast_order_limit';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| mroonga_fast_order_limit | 0     |
+--------------------------+-------+
1 row in set (0.00 sec)