Tablestore の多次元インデックスは、Text 型の列に対する一致検索をサポートしています。一致検索を実行するために、多次元インデックスは設定されたアナライザを使用して、Text 型の列の値とクエリキーワードをトークン化してから、近似一致を実行します。「フレーズ一致検索」で説明されているように、あいまいトークン化を使用する Text 型の列に対して、パフォーマンス専有型のあいまい検索を実行することもできます。
前提条件
Tablestore クライアントが初期化されていること。詳細については、「Tablestore クライアントの初期化」をご参照ください。
データテーブルが作成されていること。データがテーブルに書き込まれていること。詳細については、「データテーブルの作成」および「データの書き込み」をご参照ください。
データテーブルの多次元インデックスが作成されていること。詳細については、「多次元インデックスの作成」をご参照ください。
パラメーター
パラメーター | 説明 |
fieldName | 一致させたいフィールドの名前。 一致検索は TEXT フィールドに適用されます。 |
text | 一致検索を実行するときに、フィールドの値を一致させるために使用されるキーワード。 一致させたいフィールドが TEXT フィールドの場合、キーワードは多次元インデックスの作成時に指定したアナライザタイプに基づいて複数のトークンにトークン化されます。多次元インデックスの作成時にアナライザタイプを指定しない場合、文字トークン化が実行されます。 たとえば、一致させたいフィールドが TEXT フィールドで、アナライザタイプを文字トークン化に設定し、検索キーワードとして "this is" を使用した場合、"..., this is tablestore"、"is this tablestore"、"tablestore is cool"、"this"、"is" などのクエリ結果を取得できます。 |
query | クエリのタイプ。クエリパラメーターを matchQuery に設定します。 |
offset | 現在のクエリが開始される位置。 |
limit | 現在のクエリで返したい行の最大数。 特定のデータなしでクエリ条件を満たす行数のみをクエリするには、limit パラメーターを 0 に設定します。 |
minimumShouldMatch | フィールドの値に含まれる一致したトークンの最小数。 行の fieldName パラメーターで指定されたフィールドの値に、少なくとも最小数の一致したトークンが含まれている場合にのみ、行が返されます。 説明 minimumShouldMatch パラメーターは、OR 論理演算子と一緒に使用する必要があります。 |
operator | 論理演算子。デフォルトでは、OR が論理演算子として使用されます。これは、列の値に少なくとも最小数の一致したトークンが含まれている場合に、行がクエリ条件を満たすことを指定します。 operator パラメーターを AND に設定した場合、列の値にすべての一致したトークンが含まれている場合にのみ、行はクエリ条件を満たします。 |
getTotalCount | クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメーターのデフォルト値は false で、クエリ条件を満たす行の総数が返されないことを指定します。 このパラメーターを true に設定すると、クエリのパフォーマンスが低下します。 |
weight | BM25 ベースのキーワード関連性スコアを計算するために、クエリ対象のフィールドに割り当てる重み。このパラメーターは、全文検索シナリオで使用されます。クエリ対象のフィールドに高い重みを指定すると、そのフィールドの BM25 ベースのキーワード関連性スコアが高くなります。このパラメーターの値は、正の浮動小数点数です。 このパラメーターは返される行数には影響しません。ただし、このパラメーターはクエリ結果の BM25 ベースのキーワード関連性スコアに影響します。 |
tableName | データテーブルの名前。 |
indexName | 多次元インデックスの名前。 |
columnsToGet | クエリ条件を満たす各行のすべての列を返すかどうかを指定します。columnsToGet パラメーターには、returnAll フィールドと columns フィールドを指定できます。 returnAll フィールドのデフォルト値は false で、すべての列が返されないことを指定します。この場合、columns フィールドを使用して返したい列を指定できます。返したい列を指定しない場合、プライマリキー列のみが返されます。 returnAll フィールドを true に設定すると、すべての列が返されます。 |
サンプルコード
次のサンプルコードは、テーブル内の Col_Keyword 列の値が "hangzhou" と一致する行をクエリする方法の例を示しています。
/**
* テーブル内の Col_Keyword 列の値が "hangzhou" と一致する行をクエリします。Tablestore は、クエリ条件を満たす行の総数と、これらの行の一部の特定のデータを返します。
* @param client
*/
private static void matchQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
MatchQuery matchQuery = new MatchQuery(); // クエリタイプを MatchQuery に設定します。
matchQuery.setFieldName("Col_Keyword"); // クエリする列の名前を指定します。
matchQuery.setText("hangzhou"); // 一致させたいキーワードを指定します。
searchQuery.setQuery(matchQuery);
searchQuery.setOffset(0); // offset を 0 に設定します。
searchQuery.setLimit(20); // limit を 20 に設定して、最大 20 行を返します。
//searchQuery.setGetTotalCount(true); // 一致した行の総数が返されるように指定します。
SearchRequest searchRequest = new SearchRequest("<TABLE_NAME>", "<SEARCH_INDEX_NAME>", searchQuery);
// columnsToGet パラメーターを設定して、返す列を指定するか、すべての列を返すように指定します。このパラメーターを設定しない場合、プライマリキー列のみが返されます。
//SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
//columnsToGet.setReturnAll(true); // すべての列が返されるように指定します。
//columnsToGet.setColumns(Arrays.asList("ColName1","ColName2")); // 返したい列を指定します。
//searchRequest.setColumnsToGet(columnsToGet);
SearchResponse resp = client.search(searchRequest);
//System.out.println("TotalCount: " + resp.getTotalCount()); // 返された行数ではなく、一致した行の総数を表示するように指定します。
System.out.println("Row: " + resp.getRows());
}
よくある質問
関連ドキュメント
多次元インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます: term クエリ、複数値完全一致検索、完全一致検索、一致検索、フレーズ一致検索、プレフィックスクエリ、範囲クエリ、ワイルドカード検索、ジオクエリ、KNN ベクタークエリ、ブール値クエリ、ネストされたクエリ、および exists クエリ。多次元インデックスを作成した後、多次元インデックスが提供するクエリメソッドを使用して、ビジネス要件に基づいて複数のディメンションからデータをクエリできます。
ソートおよびページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、「ソートとページングの実行」をご参照ください。
折りたたみ (distinct) 機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータがクエリ結果に一度だけ表示されます。詳細については、「折りたたみ (distinct)」をご参照ください。
テーブル内のデータを分析したい場合は、Search 操作を呼び出して集約機能を使用するか、SQL クエリ機能を使用できます。たとえば、最大値と最小値、値の合計、行数をクエリできます。詳細については、「集約」および「SQL クエリ」をご参照ください。
行をソートする必要なく、クエリ条件を満たすすべての行を取得したい場合は、ParallelScan および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、「並列スキャン」をご参照ください。