検索インデックスは、文字列関連のデータの型として Keyword、FuzzyKeyword、および Text の 3 種類をサポートしています。クエリ要件に基づいて適切な型を選択してください。
背景情報
Tablestore のデータテーブルでは、主な文字列型は String です。これは C++ や Java の文字列型と同等です。多次元インデックスでは、この単一の型を 3 つの専用バリエーションに細分化し、異なるクエリパターンをサポートします。
|
型 |
最適な用途 |
|
Keyword |
完全一致検索、範囲クエリ、ソート、集約 |
|
FuzzyKeyword |
任意のデータセットサイズにおいて、高性能なワイルドカード検索、プレフィックス検索、サフィックス検索 |
|
Text |
形態素解析と関連スコアに基づく全文検索 |
型マッピング
データテーブルの String 型は、多次元インデックスでは Keyword、FuzzyKeyword、または Text のいずれかに直接マッピングされます。仮想カラム機能を使用すると、Integer 型または Double 型もこれらの 3 つの文字列型のいずれかにマッピングできます。
|
テーブル内のデータの型 |
方法 |
多次元インデックス内のデータの型 |
|
String |
直接使用 |
Keyword |
|
FuzzyKeyword |
||
|
Text |
||
|
Integer |
仮想カラム |
Keyword |
|
FuzzyKeyword |
||
|
Text |
||
|
Double |
仮想カラム |
Keyword |
|
FuzzyKeyword |
||
|
Text |
データの型
Keyword
Keyword は文字列を分割不能な単一の値として扱います。これはリレーショナルデータベースの文字列フィールドと同様です。完全一致検索、複数値完全一致検索、範囲クエリ、ワイルドカード検索、プレフィックス検索、および exists クエリ(null 値クエリ)をサポートします。また、ソートや統計集約(GroupBy を含む)も可能です。
Keyword の適切な使用例:ユーザー ID、状態コード、メールアドレス、国別コードなど、完全一致での検索や集約が必要なフィールドです。
100 万件を超えるデータセットでは、データセットのサイズが増加するにつれてワイルドカード検索およびプレフィックス検索のパフォーマンスが低下します。大規模データセットで高性能なあいまい一致が必要な場合は、FuzzyKeyword を使用してください。
Text
Text は全文検索向けに設計されています。インデックス作成前に、システムは設定された形態素解析方法を使用して文字列をトークンに分割し、各トークンを個別にインデックス化します。クエリ実行時にも、クエリ文字列に対して同じ形態素解析が適用され、インデックスと照合されます。
Text は元の値ではなくトークンをインデックス化するため、関連スコア、結果のハイライトおよびまとめ、一致検索、フレーズ一致検索をサポートします。一方で、完全一致検索、ソート、集約はサポートしていません。
Text の適切な使用例:商品説明、記事本文、ユーザーレビューなど、長い文字列内から単語やフレーズを検索する必要があるフィールドです。
利用可能な形態素解析方法については、「形態素解析」をご参照ください。
FuzzyKeyword
FuzzyKeyword はワイルドカード検索、プレフィックス検索、サフィックス検索に最適化されています。各フィールド値の部分文字列を事前にインデックスに格納するため、クエリは行単位で値をスキャンするのではなく、コンパクトなインデックス構造をスキャンします。これにより、データセットのサイズに関係なく、ワイルドカード検索およびプレフィックス検索のパフォーマンスが常に高速に保たれます。
FuzzyKeyword の適切な使用例:ログメッセージ、ファイルパス、商品 SKU など、ユーザーが部分文字列を入力して検索するフィールドです。
サフィックス検索には、FuzzyKeyword 型で SuffixQuery を使用してください。代替手段として、データを反転させて Keyword フィールド上で PrefixQuery を実行することも可能ですが、パフォーマンスは劣ります。
FuzzyKeyword フィールドはソートや統計集約をサポートしていません。FuzzyKeyword フィールドをソートまたは集約する必要がある場合は、仮想カラム機能を使用して Keyword 型にマッピングしてください。
あるフィールドで完全一致検索、高性能なあいまい検索、全文検索など複数のクエリ機能が必要な場合は、仮想カラム機能を使用して、1 つのテーブルカラムをそれぞれ Keyword、Text、FuzzyKeyword 型の 3 つの多次元インデックスカラムにマッピングしてください。詳細については、「仮想カラム」をご参照ください。
型の比較
3 種類の文字列型は、サポートされるクエリ機能とフィールドの最大長が異なります。
チェックマーク (✓) は機能がサポートされていることを示します。バツ印 (×) は機能がサポートされていないことを示します。
|
機能 |
Keyword |
FuzzyKeyword |
Text |
|
✓ |
× |
× |
|
|
✓ |
× |
× |
|
|
✓ |
× |
× |
|
|
✓ |
✓ |
✓ |
|
|
✓ |
× |
× |
|
|
✓ |
× |
× |
|
|
× |
× |
✓ |
|
|
全文検索:関連スコア |
× |
× |
✓ |
|
全文検索:ハイライトおよびまとめ |
× |
× |
✓ |
|
× |
× |
✓ |
|
|
× |
× |
✓ |
|
|
✓ (大規模データセットではパフォーマンスが低下) |
✓ (高性能) |
× |
|
|
✓ (大規模データセットではパフォーマンスが低下) |
✓ (高性能) |
× |
|
|
サフィックス検索 |
× |
✓ |
× |
|
最大長 |
4 KB |
2 KB |
2 MB |