5.5.6. mroonga_snippet() — Mroonga vmrn_version documentation

本文へスキップ
`Ctrl`+`K`

# 5.5.6. `mroonga_snippet()`

Added in version 2.07.

## 5.5.6.1. 概要

`mroonga_snippet()` UDFは文脈付き索引を取得する機能を提供します。

## 5.5.6.2. 構文

`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])

## 5.5.6.3. 使いかた

キーワードと周辺のテキストを検索結果として取得したいことがあります。

スニペットは「キーワードと関連するテキスト」という意味です。「文脈付き索引」ともいいます。

`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.');

実行結果がこちらです。

    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' IN BOOLEAN MODE);
    +----+-------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | 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.

## 5.5.6.4. 引数

### 5.5.6.4.1. 必須引数

多くの必須引数があります。

#### 5.5.6.4.1.1. `document`

カラム名もしくは文字列が必要です。

#### 5.5.6.4.1.2. `max_length`

スニペットの最大長(バイト単位)が必要です。

#### 5.5.6.4.1.3. `max_count`

スニペットの最大要素数Nが必要です。

#### 5.5.6.4.1.4. `encoding`

文書のエンコーティング(照合順序)を指定します。エンコーディングとして 'ascii_general_ci'や'cp932_japanese_ci'、'eucjpms_japanese_ci'などが指 定できます。

#### 5.5.6.4.1.5. `skip_leading_spaces`

先頭の空白を無視するかを指定します。1なら無視し、0なら無視しません。

#### 5.5.6.4.1.6. `html_escape`

HTMLのエスケープを行うかを指定します。1ならエスケープし、0ならそのまま 出力します。

#### 5.5.6.4.1.7. `prefix`

スニペットの開始テキストを指定します。

#### 5.5.6.4.1.8. `suffix`

スニペットの終了テキストを指定します。

### 5.5.6.4.2. 省略可能引数

省略可能な引数として `wordN` と開始テキスト、終了テキストがあります。

#### 5.5.6.4.2.1. `wordN`

任意の単語指定します。

#### 5.5.6.4.2.2. `wordN_prefix`

N番目の単語の開始テキストを指定します。

#### 5.5.6.4.2.3. `wordN_suffix`

N番目の単語の終了テキストを指定します。

## 5.5.6.5. 返り値

スニペット文字列を返します。