mroonga_snippetには必須引数と省略可能引数とがあります。:
mroonga_snippet document
max_length
max_count
encoding
skip_leading_spaces
html_escape
snippet_prefix
snippet_suffix
word1 word1_prefix word1_suffix
...
[wordN wordN_prefix wordN_suffix]
キーワードと周辺のテキストを検索結果として取得したいことがあります。
スニペットは'キーワードと関連するテキスト'を意味します。文脈付き索引ともいいます。
mroonga_snippet 関数は検索結果からスニペットを取得する方法を提供します。
mroonga_snippet UDFはストレージモードとラッパーモードいずれでも使 えます。
mroonga_snippet 関数はユーザ定義関数(UDF)としてMroongaに含まれていますが、インストール時にCREATE FUNCTIONでMySQLに追加していない場合には、以下の関数定義DDLを実行しておく必要があります。
mysql> CREATE FUNCTION mroonga_snippet RETURNS STRING SONAME 'ha_mroonga.so';
mroonga_snippet 関数は MATCH ... AGAINST構文とともに使用して、テキストに含まれるキーワードとその関連語句を検索するのに便利です。
'fulltext'というキーワードと'MySQL'と'search'という関連語を含む文書の検索をしてみましょう。
mroonga_snippet 関数は上記のことができます。
実行例のスキーマ定義(ストレージモード)はこちらです:
CREATE TABLE `snippet_test` (
`id` int(11) NOT NULL,
`text` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `text` (`text`)
) ENGINE=mroonga DEFAULT CHARSET=utf8
実行例(ラッパーモード)のスキーマ定義はこちらです。:
CREATE TABLE `snippet_test` (
`id` int(11) NOT NULL,
`text` text,
PRIMARY KEY (`id`),
FULLTEXT KEY `text` (`text`)
) ENGINE=mroonga COMMENT 'engine = "innodb"' DEFAULT CHARSET=utf8
Here is the sample data for execution examples:
INSERt INTO snippet_test (id, text) VALUES (1, 'An open-source fulltext search engine and column store.');
INSERT INTO snippet_test (id, text) VALUES (2, 'An open-source storage engine for fast fulltext search with MySQL.');
INSERT INTO snippet_test (id, text) VALUES (3, 'Tritonn is a patched version of MySQL that supports better fulltext search function with Senna.');
Here is the results of execution examples:
mysql> SELECT * FROM snippet_test;
+----+-------------------------------------------------------------------------------------------------+
| id | text |
+----+-------------------------------------------------------------------------------------------------+
| 1 | An open-source fulltext search engine and column store. |
| 2 | An open-source storage engine for fast fulltext search with MySQL. |
| 3 | Tritonn is a patched version of MySQL that supports better fulltext search function with Senna. |
+----+-------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
mysql> SELECT id, text, mroonga_snippet(text, 8, 2, 'ascii_general_ci', 1, 1, '...', '...<br>', 'fulltext', '<span class="w1">', '</span>', 'MySQL', '<span class="w2">', '</span>', 'search', '<span calss="w3">', '</span>') FROM snippet_test WHERE MATCH(text) AGAINST ('fulltext');
+----+-------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| id | text | mroonga_snippet(text, 8, 2, 'ascii_general_ci', 1, 1, '...', '...<br>', 'fulltext', '<span class="w1">', '</span>', 'MySQL', '<span class="w2">', '</span>', 'search', '<span calss="w3">', '</span>') |
+----+-------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 1 | An open-source fulltext search engine and column store. | ...<span class="w1">fulltext</span>...<br>... <span calss="w3">search</span> ...<br> |
| 2 | An open-source storage engine for fast fulltext search with MySQL. | ...<span class="w1">fulltext</span>...<br>... <span calss="w3">search</span> ...<br> |
| 3 | Tritonn is a patched version of MySQL that supports better fulltext search function with Senna. | ...f <span class="w2">MySQL</span> ...<br>...<span class="w1">fulltext</span>...<br> |
+----+-------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
The keyword 'fulltext' and associated keyword 'MySQL' and 'search' has been extracted.
多くの必須引数があります。
カラム名もしくは文字列が必要です。
スニペットの最大長(バイト単位)が必要です。
スニペットの最大要素数Nが必要です。
文書のエンコーティング(照合順序)を指定します。エンコーディングとして 'ascii_general_ci'や'cp932_japanese_ci'、'eucjpms_japanese_ci'などが指 定できます。
先頭の空白を無視するかを指定します。1なら無視し、0なら無視しません。
HTMLのエスケープを行うかを指定します。1ならエスケープし、0ならそのまま 出力します。
スニペットの開始テキストを指定します。
スニペットの終了テキストを指定します。
スニペット文字列を返します。