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
テーブルに登録されていません。そのためマッチしません。