Tablestore SDK for Java を使用して Lastpoint インデックスに検索インデックスを作成し、データフィールドの条件に基づいて各時系列の最新データをクエリします。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。Lastpoint インデックスにはバージョン 5.17.1 以降が必要です。最新バージョンの使用を推奨します。
説明
Lastpoint インデックスからのダイレクトリードは、プライマリキーの範囲によってデータを特定します。ブールクエリ、全文検索、ジオクエリ、または集計を使用してデータフィールドで最新データをフィルタリングするには、Lastpoint インデックスに検索インデックスを作成し、search を呼び出します。クエリ機能の詳細については、「検索インデックス」をご参照ください。
public CreateSearchIndexResponse createSearchIndex(CreateSearchIndexRequest request) throws TableStoreException, ClientException
public SearchResponse search(SearchRequest request) throws TableStoreException, ClientException
検索インデックスの作成
検索できるのは、検索インデックススキーマに含まれるフィールドのみです。Lastpoint インデックスの _tags フィールドは文字列配列であり、キーワード配列としてマッピングする必要があります。その他のデータフィールドは、対応する型にマッピングします。
次の例では、example_lastpoint_index に example_search_index を作成し、_tags、speed、status フィールドをインデックス化します。
List<FieldSchema> fieldSchemas = Arrays.asList(
new FieldSchema("_tags", FieldType.KEYWORD)
.setIndex(true).setIsArray(true),
new FieldSchema("speed", FieldType.DOUBLE)
.setIndex(true).setEnableSortAndAgg(true),
new FieldSchema("status", FieldType.KEYWORD)
.setIndex(true).setEnableSortAndAgg(true));
IndexSchema indexSchema = new IndexSchema();
indexSchema.setFieldSchemas(fieldSchemas);
CreateSearchIndexRequest request = new CreateSearchIndexRequest();
request.setTableName("example_lastpoint_index");
request.setIndexName("example_search_index");
request.setIndexSchema(indexSchema);
client.createSearchIndex(request);
最新データのクエリ
検索インデックスの作成は非同期です。インデックスステータスが RUNNING に変わり、データ同期フェーズが INCR に変わった後にクエリを実行します。
次の例では、範囲クエリを使用して speed が 20.0 より大きい Lastpoint の行を取得します。このクエリは、一致する行の総数とすべての列を返します。
RangeQuery rangeQuery = new RangeQuery();
rangeQuery.setFieldName("speed");
rangeQuery.greaterThan(ColumnValue.fromDouble(20.0));
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(rangeQuery);
searchQuery.setGetTotalCount(true);
SearchRequest request = new SearchRequest(
"example_lastpoint_index",
"example_search_index",
searchQuery);
SearchRequest.ColumnsToGet columnsToGet =
new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
response.getRows().forEach(System.out::println);
パラメーター
検索インデックス作成リクエスト
CreateSearchIndexRequest には、次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
tableName (required) |
|
Lastpoint インデックス名。検索インデックスを作成する際、Lastpoint インデックスはデータテーブルとして使用されます。 |
|
indexName (required) |
|
検索インデックス名。 |
|
indexSchema (required) |
|
フィールドスキーマ、インデックス設定、事前ソート設定を含む検索インデックススキーマ。 |
インデックスフィールド
indexSchema.fieldSchemas[] の各要素は FieldSchema 型です。例のフィールドは、次のパラメーターで設定します。
|
名前 |
型 |
説明 |
|
fieldName (required) |
|
Lastpoint インデックス内のフィールド名。 |
|
fieldType (required) |
|
検索インデックスのフィールド型。この型は、Lastpoint インデックス内の値の型と一致している必要があります。 |
|
index (optional) |
|
フィールドをインデックス化するかどうかを指定します。デフォルト値: |
|
isArray (optional) |
|
フィールドが配列かどうかを指定します。デフォルト値: |
|
enableSortAndAgg (optional) |
|
ソートと集計を有効にするかどうかを指定します。デフォルト値: |
検索リクエスト
SearchRequest には、次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
tableName (required) |
|
Lastpoint インデックス名。 |
|
indexName (required) |
|
Lastpoint インデックスの検索インデックス名。 |
|
searchQuery (required) |
|
クエリ設定。例では |
|
columnsToGet (optional) |
|
取得する列。指定しない場合、プライマリキー列のみが返されます。例では |
レスポンス
SearchResponse には、次の操作固有フィールドが含まれます。
|
フィールド |
型 |
説明 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|