トークン化は、設定したトークナイザーのタイプに基づいて、テキストフィールドの内容を複数のトークンに分割します。トークナイザータイプを設定できるのは、Text タイプのフィールドのみです。
背景情報
テキストフィールドはソートまたは集約をサポートしていません。テキストフィールドでもソートまたは集約が必要な場合は、Keyword タイプの仮想カラムを使用します。
テキストフィールドは、一般的にマッチクエリ (MatchQuery) およびマッチフレーズクエリ (MatchPhraseQuery) で使用されます。一部のシナリオでは、Term クエリ (TermQuery)、Terms クエリ (TermsQuery)、プレフィックスクエリ (PrefixQuery)、ワイルドカードクエリ (WildcardQuery) でも使用されます。
トークナイザーのタイプ
Tablestore は、シングルワードトークン化、区切り文字トークン化、最小意味トークン化、最大意味トークン化、あいまいトークン化の 5 種類のトークナイザータイプをサポートしています。デフォルトでは、テキストフィールドはシングルワードトークン化を使用します。
すべてのトークナイザータイプは、ファジークエリのシナリオで使用できます。
次の表では、主要な観点で 5 種類のトークナイザータイプを比較し、シナリオに適したタイプを選択できるようにしています。
| 項目 | シングルワードトークン化 | 区切り文字トークン化 | 最小意味トークン化 | 最大意味トークン化 | あいまいトークン化 |
| インデックス拡張 | 小 | 小 | 小 | 中 | 大 |
| 関連性への影響 | 弱 | 弱 | 中 | 比較的強い | 比較的強い |
| 適用可能な言語 | すべて | すべて | 中国語 | 中国語 | すべて |
| 長さの制限 | なし | なし | なし | なし | 1,024 文字 |
| 再現率 | 高 | 低 | 低 | 中 | 高 |
以降のセクションでは、各トークナイザータイプとそのパラメーターについて説明します。
シングルワードトークン化 (SingleWord)
シングルワードトークン化タイプは、中国語、英語、日本語を含むすべての言語に適用されます。テキストフィールドのデフォルトのトークナイザータイプです。
トークナイザータイプをシングルワードトークン化に設定すると、トークン化は次のように動作します:
中国語テキストは 1 文字ずつ分割されます。このトピックの中国語の例は、トークンの境界がわかるようにピンインでローマ字表記しています。例えば、2 文字の都市名 "hangzhou" (Hangzhou) は "hang" と "zhou" に分割されます。"hang" に対するマッチクエリまたはマッチフレーズクエリは、内容に "hangzhou" を含む行を返します。
英字と数字は、スペースまたは句読点で分割されます。
caseSensitiveが false の場合、トークン化は大文字と小文字を区別せず、Tablestore はトークン化された英字を格納する前にすべて小文字に変換します。例えば、"Hang Zhou" は "hang" と "zhou" に分割され、"hang"、"HANG"、または "Hang" に対するマッチクエリまたはマッチフレーズクエリはこの行を返します。caseSensitiveが true の場合、トークン化は大文字と小文字を区別し、Tablestore はトークン化された英字を格納する際に元の大文字小文字を保持します。例えば、"Hang Zhou" は "Hang" と "Zhou" に分割され、"Hang" または "Zhou" に対するマッチクエリまたはマッチフレーズクエリはこの行を返します。
製品の型番など、数字と英字が結合された用語も、スペースまたは句読点で分割されます。ただし、デフォルトでは、その用語内の数字と英字は分割されません。例えば、"iphone6" は単一のトークン "iphone6" のままです。マッチクエリまたはマッチフレーズクエリは、完全な用語 "iphone6" を指定した場合にのみ行を返し、"iphone" に対するクエリは何も返しません。数字を英字から分割するには、
次の表では、シングルワードトークン化のパラメーターについて説明します。delimitWordパラメーターを true に設定します。この場合、"iphone6" は "iphone" と "6" に分割され、"iphone" または "6" のいずれかに対するマッチクエリまたはマッチフレーズクエリはこの行を返します。
| パラメーター | 説明 |
| caseSensitive | トークン化で大文字と小文字を区別するかどうかを指定します。デフォルト値は false で、すべての英字が小文字に変換されることを意味します。システムが英字を自動的に小文字に変換しないようにし、大文字小文字を保持する必要がある場合は、caseSensitive を true に設定します。 |
| delimitWord | 数字と英字が結合された用語において、英字を数字から分割するかどうかを指定します。デフォルト値は false で、数字と英字が分割されないことを意味します。分割する必要がある場合は、delimitWord を true に設定します。この場合、"iphone6" は "iphone" と "6" に分割されます。 |
区切り文字トークン化 (Split)
Tablestore は汎用辞書に基づくトークン化を提供します。ただし、特定の専門分野では、トークン化にカスタム辞書が必要になる場合があります。これに対応するため、Tablestore は区切り文字トークン化 (カスタムトークン化とも呼ばれます) を提供しています。つまり、コンテンツを自分でトークン化し、特定の区切り文字でトークンを結合したうえで、その結果を Tablestore に書き込みます。
区切り文字トークン化タイプは、中国語、英語、日本語を含むすべての言語に適用されます。
テキストフィールドに区切り文字トークン化を設定すると、フィールド値は delimiter パラメーターで指定した値が出現するたびに分割されます。例えば、フィールド値が "badminton,table tennis,rap" で、区切り文字がカンマ (,) の場合、値は "badminton"、"table tennis"、"rap" に分割され、これらのトークンがインデックス化されます。"badminton"、"table tennis"、または "rap" に対するマッチクエリまたはマッチフレーズクエリは、この行を返します。
次の表では、区切り文字トークン化のパラメーターについて説明します。
| パラメーター | 説明 |
| caseSensitive | トークン化で大文字と小文字を区別するかどうかを指定します。デフォルト値は false で、すべての英字が小文字に変換されることを意味します。システムが英字を自動的に小文字に変換しないようにし、大文字小文字を保持する必要がある場合は、caseSensitive を true に設定します。この設定は Tablestore Java SDK 5.17.2 以降でサポートされています。 |
| delimiter | 区切り文字です。デフォルト値は空白文字です。カスタムの区切り文字を指定できます。多次元インデックスのフィールドトークン化設定における区切り文字は、データ書き込み時に使用する区切り文字と同一である必要があります。異なる場合、クエリでデータが返されないことがあります。カスタムの区切り文字が番号記号 (#) やチルダ (~) などの特殊文字である場合は、エスケープ文字 \ を使用してフィールドトークン化設定に指定します。例えば、番号記号には \# を使用します。 |
最小意味トークン化 (MinWord)
最小意味トークン化タイプは中国語に適用され、一般的に全文検索のシナリオで使用されます。
トークナイザータイプを最小意味トークン化に設定すると、システムはテキストフィールドの内容を、意味を持つトークン数が最小になるように分割します。例えば、3 文字の用語 "lihuacha" (pear blossom tea) は "li" と "huacha" に分割され、生成されるトークンは重なりません。別の例として、7 文字の用語 "zhonghuarenmingongheguo" は単一のトークン "zhonghuarenmingongheguo" のまま保持されます。
最大意味トークン化 (MaxWord)
最大意味トークン化タイプは中国語に適用され、一般的に全文検索のシナリオで使用されます。
トークナイザータイプを最大意味トークン化に設定すると、システムは可能な限り多くの意味トークンを分割します。トークン同士は重なり、累積の長さは元のテキストの長さを超え、インデックスサイズも拡張します。例えば、3 文字の用語 "lihuacha" (pear blossom tea) は "lihua" と "huacha" に分割され、"hua" で重なります。別の例として、7 文字の用語 "zhonghuarenmingongheguo" は "zhonghuarenmingongheguo"、"zhonghuarenmin"、"zhonghua"、"huaren"、"renmingongheguo"、"renmin"、"gongheguo"、"gonghe"、"guo" に分割されます。
このトークナイザータイプは生成されるトークン数が多く、クエリ実行時に一致する確率が高くなりますが、インデックスサイズは大幅に拡張します。マッチフレーズクエリよりもマッチクエリに適しています。マッチフレーズクエリを使用する場合、クエリのキーワードも同じ方法でトークン化されるため、位置情報が重なり、データが見つからない可能性があります。
あいまいトークン化 (Fuzzy)
あいまいトークン化タイプは、中国語、英語、日本語を含むすべての言語に適用されます。一般的に、タイトル、映画名、書籍名、ファイル名、ディレクトリ名などの短いテキストを扱うシナリオで使用されます。
あいまいトークン化タイプは、非常に低いレイテンシーで結果を返し、ワイルドカードクエリよりも優れたパフォーマンスを発揮しますが、インデックスサイズは一定程度拡張します。
トークナイザータイプをあいまいトークン化に設定すると、システムはテキストコンテンツに対して N-gram トークン化を実行し、生成される各トークンの長さは minChars から maxChars の範囲になります。これは、ドロップダウン候補などの機能に役立ちます。
ファジークエリを実装するには、あいまいトークン化を使用するカラムに対してマッチフレーズクエリを使用する必要があります。ほかのクエリタイプは使用できません。そのカラムに複数のクエリ要件がある場合は、仮想カラム機能を使用します。仮想カラムの使用方法の詳細については、「仮想カラム」をご参照ください。
制限
テキストフィールドのトークナイザータイプがあいまいトークン化の場合、フィールド値は 1,024 文字を超えることはできません。この制限を超える場合、システムは超過分の文字を切り捨てて破棄し、先頭の 1,024 文字のみを保持します。
インデックス化されたデータ量の過度な拡張を防ぐため、最大トークン長と最小トークン長の差 (
maxChars-minChars) は 15 を超えることはできません。
パラメーター
| パラメーター | 説明 |
| minChars | 最小トークン長です。各トークンの組み合わせに含まれる文字数は、この値以上である必要があります。デフォルト値は 1 です。 |
| maxChars | 最大トークン長です。各トークンの組み合わせに含まれる文字数は、この値以下である必要があります。デフォルト値は 7 です。 |
| caseSensitive | トークン化で大文字と小文字を区別するかどうかを指定します。デフォルト値は false で、すべての英字が小文字に変換されることを意味します。システムが英字を自動的に小文字に変換しないようにし、大文字小文字を保持する必要がある場合は、caseSensitive を true に設定します。この設定は Tablestore Java SDK 5.17.2 以降でサポートされています。 |
例
次の例を使用して、各トークナイザータイプがインデックス作成時およびクエリ実行時にコンテンツをどのように分割するかを確認できます。
インデックス作成時には、トークン化された文字列の値が分割されてインデックス化されます。クエリ実行時には、クエリのキーワードも分割され、システムは以前に構築されたインデックスに対してトークンの一致を試みます。次の表に示すトークンはすべて、ピンインでローマ字表記しています。
フィールド値は "zhonghuarenmingongheguo-guoge" (ハイフンで結合された中国語フレーズをピンインでローマ字表記したもの) です。次の表は、各トークナイザータイプがインデックス作成時に生成するトークンを示しています。
| タイプ | パラメーター | インデックス作成時のトークン |
シングルワードトークン化 (SingleWord) | デフォルト | "zhong", "hua", "ren", "min", "gong", "he", "guo", "ge" |
区切り文字トークン化 (Split) | delimiter: "-" | "zhonghuarenmingongheguo", "guoge" |
最小意味トークン化 (MinWord) | デフォルト | "zhonghuarenmingongheguo", "guoge" |
最大意味トークン化 (MaxWord) | デフォルト | "zhonghuarenmingongheguo", "zhonghuarenmin", "zhonghua", "huaren", "renmingongheguo", "renmin", "gongheguo", "gonghe", "guo", "guoge" |
あいまいトークン化 (Fuzzy) | minChars: 1, maxChars: 3 | "zhong", "zhonghua", "zhonghuaren", "hua", "huaren", "huarenmin", "ren", "renmin", "renmingong", "min", "mingong", "mingonghe", "gong", "gonghe", "gongheguo", "he", "heguo", "guo", "guoge", "ge" |
同じフィールド値 "zhonghuarenmingongheguo-guoge" について、次の表は各トークナイザータイプがクエリ実行時に生成するトークンを示しています。
| タイプ | パラメーター | クエリ実行時のトークン |
シングルワードトークン化 (SingleWord) | デフォルト | "zhong", "hua", "ren", "min", "gong", "he", "guo", "ge" |
区切り文字トークン化 (Split) | delimiter: "-" | "zhonghuarenmingongheguo", "guoge" |
最小意味トークン化 (MinWord) | デフォルト | "zhonghuarenmingongheguo", "guoge" |
最大意味トークン化 (MaxWord) | デフォルト | "zhonghuarenmingongheguo", "zhonghuarenmin", "zhonghua", "huaren", "renmingongheguo", "renmin", "gongheguo", "gonghe", "guo", "guoge" |
あいまいトークン化 (Fuzzy) | デフォルト (minChars: 1, maxChars: 7) | "zhonghuarenmingongheguo-guoge" |