`Ctrl`+`K`

# 7.8.16. `TokenTable`

## 7.8.16.1. 概要

`TokenTable` は既知のキーワードのみをトークンとして扱うトークナイザーです。既知のキーワードは `TokenTable` 用のテーブルにキーとして登録されていないといけません。

例えば、クエリーが既知のキーワードと既知でないキーワードを含む場合、検索クエリーには既知のキーワードのみが使われます。(既知でないキーワードは無視されます) コンテンツを既知のキーワードからしか検索できないとも言えます。この特徴のため、新語を使えるようにするにはキーワードを登録するテーブルを継続的にメンテナンスする必要があります。

## 7.8.16.2. 構文

`TokenTable` には必須の引数があります。

テーブルを指定します。:

    TokenTable("table", TABLE)

`TABLE` は `--default_tokenizer 'TokenTable("table", TABLE)` を指定して作成されていないといけません。

## 7.8.16.3. 使い方

`TokenTable` の使用例です。例えば `Raspberry Pie` を `Pies` テーブルから検索してみましょう。キーワードのために使われるのは `Keywords` テーブルです。

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

実行例:

    table_create Pies TABLE_NO_KEY
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Pies name COLUMN_SCALAR Text
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    table_create Keywords TABLE_PAT_KEY ShortText --default_tokenizer 'TokenTable("table", "Keywords")'
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    column_create Keywords index COLUMN_INDEX Pies name
    # [[0, 1337566253.89858, 0.000355720520019531], true]
    load --table Keywords
    [
    {"_key": "Apple"}
    {"_key": "Orange"}
    {"_key": "Raspberry"}
    ]
    # [[0, 1337566253.89858, 0.000355720520019531], 3]
    load --table Pies
    [
    {"name": "Apple Pie"},
    {"name": "Orange Pie"}
    {"name": "Raspberry Pie"}
    {"name": "Stargazy Pie"}
    ]
    # [[0, 1337566253.89858, 0.000355720520019531], 4]

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

実行例:

    select Pies --match_columns name --query 'Raspberry'
    # [
    #   [
    #     0,
    #     1337566253.89858,
    #     0.000355720520019531
    #   ],
    #   [
    #     [
    #       [
    #         1
    #       ],
    #       [
    #         [
    #           "_id",
    #           "UInt32"
    #         ],
    #         [
    #           "name",
    #           "Text"
    #         ]
    #       ],
    #       [
    #         3,
    #         "Raspberry Pie"
    #       ]
    #     ]
    #   ]
    # ]

期待通りに、上記のクエリーは `Raspberry Pie` というレコードにマッチします。

次に、`Stargazy Pie` を `--query Stargazy` で検索してみましょう。

実行例:

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

上記の例では、`Stargazy` というキーワードは `Keywords` テーブルに登録されていません。そのためマッチしません。

## 7.8.16.4. 参考

- tokenize