このトピックでは、データテーブルの検索インデックスを作成し、検索インデックスを使用して、主キー以外の列に基づくクエリやブールクエリなどのクエリを Tablestore コンソールで実行する方法について説明します。
前提条件
Tablestore CLI がダウンロードされていること。詳細については、「Tablestore CLI のダウンロード」をご参照ください。
インスタンスが起動され、構成されていること。詳細については、「Tablestore CLI の起動とアクセス情報の構成」をご参照ください。
AccessKey ペアを取得していること。詳細については、「AccessKey ペアの取得」をご参照ください。
データテーブルが作成され、使用されていること。詳細については、「データテーブルの作成と使用」をご参照ください。
データテーブルの最大バージョンパラメータが 1 に設定されており、データテーブルの有効期間(TTL)が次のいずれかの要件を満たしていること。
データテーブルの TTL が -1 に設定されていること。これは、データテーブル内のデータが期限切れにならないことを指定します。
データテーブルの TTL が -1 以外の値に設定されており、データテーブルの更新操作が禁止されていること。
使用上の注意
検索インデックスのフィールドのデータ型は、検索インデックスが作成されるデータテーブルのフィールドのデータ型と一致している必要があります。詳細については、「データ型」をご参照ください。
検索インデックスの TTL を -1 以外の値に設定する場合は、検索インデックスが作成されるデータテーブルで UpdateRow 操作が禁止されていることを確認してください。データテーブルに対して作成された検索インデックスの TTL は、データテーブルの TTL 以下である必要があります。詳細については、「検索インデックスの TTL の指定」をご参照ください。
手順 1:検索インデックスを作成する
create_search_index コマンドを実行して、search_index という名前の検索インデックスを作成します。
create_search_indexコマンドを実行して、search_index という名前の検索インデックスを作成します。create_search_index -n search_indexプロンプトが表示されたら、インデックススキーマを入力します。
インデックススキーマには、検索インデックスの設定(IndexSetting)、フィールドスキーマのリスト(FieldSchemas)、および検索インデックスの事前ソート設定(IndexSort)が含まれます。検索インデックスのスキーマの詳細については、「検索インデックスの作成」をご参照ください。
{ "IndexSetting": { "RoutingFields": null // ルーティングフィールド }, "FieldSchemas": [ // フィールドスキーマ { "FieldName": "gid", // フィールド名 "FieldType": "LONG", // フィールドタイプ "Index": true, // インデックスを作成するかどうか "EnableSortAndAgg": true, // ソートと集計を有効にするかどうか "Store": true, // 値を保存するかどうか "IsArray": false, // 配列かどうか "IsVirtualField": false // 仮想フィールドかどうか }, { "FieldName": "uid", "FieldType": "LONG", "Index": true, "EnableSortAndAgg": true, "Store": true, "IsArray": false, "IsVirtualField": false }, { "FieldName": "col2", "FieldType": "LONG", "Index": true, "EnableSortAndAgg": true, "Store": true, "IsArray": false, "IsVirtualField": false }, { "FieldName": "col3", "FieldType": "TEXT", "Index": true, "Analyzer": "single_word", // アナライザー "AnalyzerParameter": { // アナライザーパラメータ "CaseSensitive": true, // 大文字と小文字を区別するかどうか "DelimitWord": null // 単語区切り文字 }, "EnableSortAndAgg": false, "Store": true, "IsArray": false, "IsVirtualField": false }, { "FieldName": "col1", "FieldType": "KEYWORD", "Index": true, "EnableSortAndAgg": true, "Store": true, "IsArray": false, "IsVirtualField": false }, { "FieldName": "col3V", "FieldType": "LONG", "Index": true, "EnableSortAndAgg": true, "Store": true, "IsArray": false, "IsVirtualField": true, // 仮想フィールド "SourceFieldNames": [ // ソースフィールド名 "col3" ] } ] }
手順 2:検索インデックスを使用してデータをクエリおよび分析する
search コマンドを実行して、検索インデックスを使用してデータをクエリおよび分析します。検索インデックスは、タームクエリ、複数タームクエリ、すべて一致クエリ、一致クエリ、フレーズ一致クエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、あいまいクエリ、ブールクエリ、地理クエリ、ネストされたクエリ、存在クエリなどのクエリメソッドをサポートしています。ビジネス要件に基づいて、さまざまなクエリメソッドを使用して複数のディメンションからデータをクエリできます。この例では、タームクエリを使用します。
search コマンドを実行して、search_index 検索インデックスを使用してデータをクエリし、クエリ条件を満たす各行のすべてのインデックス付き列を返します。
search -n search_index --return_all_indexedプロンプトが表示されたら、クエリ条件を入力します。
次のサンプルコードは、uid の値が 10001 である行をクエリし、pid 列の平均値を返す方法を示しています。
{ "Offset": -1, // オフセット "Limit": 10, // 制限 "Collapse": null, // 折りたたみ "Sort": null, // ソート "GetTotalCount": true, // 総数を取得するかどうか "Token": null, // トークン "Query": { // クエリ "Name": "TermQuery", // クエリ名 "Query": { // クエリパラメータ "FieldName": "uid", // フィールド名 "Term": 10001 // ターム } }, "Aggregations": [{ // 集計 "Name": "avg", // 集計名 "Aggregation": { // 集計パラメータ "AggName": "agg1", // 集計名 "Field": "pid" // フィールド } }] }
FAQ
関連情報
Tablestore コンソールまたは Tablestore SDK を使用して検索インデックスを使用することもできます。詳細については、「Tablestore コンソールの使用」および「Tablestore SDK の使用」をご参照ください。
ソートおよびページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、「ソートとページング」をご参照ください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータはクエリ結果に 1 回だけ表示されます。詳細については、「折りたたみ(重複排除)」をご参照ください。
データテーブル内のデータを分析する場合は、Search 操作の集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、および行の総数を取得できます。詳細については、「集計」および「SQL クエリ」をご参照ください。
TTL 機能を使用して、検索インデックスの履歴データを自動的に削除できます。詳細については、「検索インデックスの TTL の指定」をご参照ください。
検索インデックスのスキーマを動的に変更して、検索インデックスのインデックス列を追加、更新、削除、および事前ソートできます。詳細については、「検索インデックスのスキーマの動的変更」をご参照ください。
データテーブルのストレージスキーマとデータを変更せずに新しいフィールドまたは新しいフィールドタイプのデータをクエリする場合は、仮想列機能を使用します。詳細については、「仮想列」をご参照ください。