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