本トピックでは、3 つの文字列関連データ型である Keyword、FuzzyKeyword、Text について説明します。また、アプリケーションに適した文字列型の選択方法についても解説します。
背景情報
String 型は、データシステムで最も一般的なデータ型であり、ほぼすべてのビジネスシナリオで使用されます。従来のリレーショナルデータベースでは、String 型は固定長文字列や可変長文字列など、さまざまな型に分類されます。
Tablestore の主要な文字列型は String です。これは、C++ や Java などのプログラミング言語における String 型に似ています。より多くの機能をサポートするため、多次元インデックスでは文字列を 3 つの特定の型に分類します。標準の文字列に似た Keyword、あいまい検索に使用される FuzzyKeyword、そして全文検索のためにトークン化をサポートする Text です。
本トピックでは、これら 3 つの文字列型の関係と違いについて説明します。また、ビジネスシナリオに応じて適切な型を選択する方法についても解説します。
テーブルと検索インデックス間のデータ型マッピング
テーブルの String 型は、多次元インデックスの Keyword、FuzzyKeyword、または Text 型にマッピングできます。また、仮想カラム機能を使用して、テーブルの Integer 型または Double 型を、多次元インデックスの Keyword、FuzzyKeyword、または Text 型にマッピングすることも可能です。
テーブルのデータ型 | メソッド | 検索インデックスのデータ型 |
String | 直接使用 | Keyword |
FuzzyKeyword | ||
Text | ||
Integer | 仮想カラム | Keyword |
FuzzyKeyword | ||
Text | ||
Double | 仮想カラム | Keyword |
FuzzyKeyword | ||
Text |
データ型
Keyword
Keyword 型は、最も一般的に使用される文字列型です。これは、データベースや C++、Java などのプログラミング言語における文字列型に似ています。
Keyword 型は、Term クエリ、範囲クエリ、ワイルドカード検索、プレフィックスクエリ、Exists クエリ (NULL 値クエリ)、ソート、および GroupBy などの集約操作をサポートします。100 万件を超える中規模から大規模のデータセットの場合、ワイルドカード検索とプレフィックスクエリのパフォーマンスは、データセットのサイズが大きくなるにつれて低下します。
あいまい検索や全文検索の機能が不要な場合は、Keyword 型を使用できます。ソートや統計的集約などの機能には Keyword 型が必要です。
Text
Text 型は、検索エンジンのテキスト型に似ており、全文検索に使用されます。複数のトークン化メソッドをサポートしています。システムはまず文字列を一連のトークンに分割し、それらを個別に保存します。
Text 型は、さまざまなトークン化メソッドを提供します。単語や文字による単純な分割を行うメソッドもあれば、セマンティクスに基づいて分割を行うメソッドもあります。ビジネスシナリオによって適したメソッドは異なります。詳細については、「トークン化」をご参照ください。
全文検索機能には Text 型を使用できます。
FuzzyKeyword
FuzzyKeyword 型は、パフォーマンス専有型のワイルドカード検索、プレフィックスクエリ、およびサフィックスクエリをサポートする文字列型です。データセットのサイズに関係なく、高いクエリパフォーマンスを維持します。
パフォーマンス専有型 (ミリ秒レベル) のワイルドカード検索、プレフィックスクエリ、またはサフィックスクエリが必要な場合は、FuzzyKeyword 型を使用できます。
サフィックスクエリを実行するには、FuzzyKeyword 型で SuffixQuery を使用します。あるいは、データを反転させて、Keyword 型でパフォーマンスの低い PrefixQuery を使用することもできます。
FuzzyKeyword フィールドは、ソートや統計的集約をサポートしていません。FuzzyKeyword フィールドでソートや集約も必要な場合は、仮想カラム機能を使用して、そのフィールドを Keyword 型にマッピングできます。
あるフィールドで Term クエリ、パフォーマンス専有型のあいまい検索、全文検索など、複数のクエリ機能が必要な場合は、仮想カラム機能を使用できます。これにより、1 つのテーブルカラムを、それぞれ Keyword 型、Text 型、FuzzyKeyword 型の 3 つの多次元インデックスカラムにマッピングできます。詳細については、「仮想カラム」をご参照ください。
各型の違い
Keyword、Text、FuzzyKeyword の各型は、サポートするクエリ機能と最大長が異なります。次の表にその違いを示します。
チェックマーク (✓) はその機能がサポートされていることを示し、バツ印 (×) はサポートされていないことを示します。
機能 | キーワード | FuzzyKeyword | テキスト |
✓ | × | × | |
✓ | × | × | |
✓ | × | × | |
✓ | ✓ | ✓ | |
✓ | × | × | |
✓ | × | × | |
× | × | ✓ | |
全文検索:関連度スコア | × | × | ✓ |
全文検索:ハイライトとサマリー | × | × | ✓ |
× | × | ✓ | |
× | × | ✓ | |
✓ (大規模データセットではパフォーマンスが低下) | ✓ (高性能) | × | |
✓ (大規模データセットではパフォーマンスが低下) | ✓ (高性能) | × | |
サフィックスクエリ | × | ✓ | × |
最大長 | 4 KB | 2 KB | 2 MB |