# 7.8.14. `TokenPattern`

## 7.8.14.1. 概要

`TokenPattern` は正規表現でトークンを抽出するのに使われるトークナイザーです。このトークナイザーは指定した正規表現にマッチしたトークンだけを抽出します。

複数の正規表現を指定することもできます。

## 7.8.14.2. 構文

`TokenPattern` は、省略可能な引数があります。

パターンを1つ指定:

    TokenPattern("pattern", PATTERN)

複数のパターンを指定:

    TokenPattern("pattern", PATTERN_1, "pattern", PATTERN_2, ... "pattern", PATTERN_N)

`TokenPattern` は上記のように複数のパターンを受け付けます。

## 7.8.14.3. 使い方

`TokenPattern` の例です。`TokenPattern` は指定した正規表現にマッチするトークンのみを抽出します。そのため抽出したトークンにのみマッチした検索結果になります。

例として、特定のキーワードによる検索結果を比較してみましょう。1つは `TokenPattern` に指定されているキーワードで、もう1つは `TokenPattern` に指定されていないキーワードとします。

`Foods` テーブルには特定のキーワードを含むメニューが両方あります。

スキーマ定義とサンプルデータは以下の通りです。

実行例:

    table_create Foods TABLE_NO_KEY
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Foods name COLUMN_SCALAR Text
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    table_create Keywords TABLE_PAT_KEY ShortText --default_tokenizer 'TokenPattern("pattern", "Apple|Orange")'
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Keywords index COLUMN_INDEX Foods name
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    load --table Foods
    [
    {"name": "Apple Pie"},
    {"name": "Orange Pie"}
    {"name": "Raspberry Pie"}
    ]
    # [[0, 1337566253.89858, 0.000355720520019531], 3]

`--query Apple` で `Apple Pie` を検索します。

実行例:

    select Foods --match_columns name --query 'Apple'
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "name",
    #           "Text"
    #         ]
    #       ],
    #       [
    #         1,
    #         "Apple Pie"
    #       ]
    #     ]
    #   ]
    # ]

上記の例では、 `Apple` は `TokenPattern` で指定したパターンにマッチします。そのため `select` は `Apple Pie` にマッチします。

`--query Raspberry` で `Raspberry Pie` を検索します。

実行例:

    select Foods --match_columns name --query 'Raspberry'
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         0
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "name",
    #           "Text"
    #         ]
    #       ]
    #     ]
    #   ]
    # ]

上記の例では、 `Foods` テーブルに `Raspberry Pie` が含まれているにもかかわらず、 `select` ではヒットしません。これは `Raspberry` は `TokenPattern` のパターンにマッチしないからです。

## 7.8.14.4. 参考

- tokenize