用語クエリを使用すると、指定したフィールドの値と完全に一致するデータをクエリできます。用語クエリは、文字列一致条件に基づくクエリに似ています。列のタイプが TEXT の場合、Tablestore は文字列をトークン化し、トークンを使用してキーワードを照合します。行内のトークンの少なくとも 1 つがキーワードと完全に一致する場合、その行はクエリ条件を満たします。列の値の照合に使用されるキーワードはトークン化されません。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルの作成およびデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスの作成を参照してください。
パラメーター
パラメーター | 説明 |
query | クエリのタイプ。このパラメーターを TermQuery に設定します。 |
fieldName | クエリ対象の列の名前。 |
term | 用語クエリの実行時に列の値の照合に使用されるキーワード。この単語はトークン化されません。代わりに、単語全体が列値の照合に使用されます。 列のタイプが TEXT の場合、Tablestore は文字列をトークン化し、トークンを使用してキーワードを照合します。行内のトークンの少なくとも 1 つがキーワードと完全に一致する場合、その行はクエリ条件を満たします。たとえば、行の TEXT タイプの列の値が "tablestore is cool" の場合、値は "tablestore"、"is"、"cool" にトークン化できます。列の値を照合するためのキーワードとして "tablestore"、"is"、または "cool" を指定すると、行はクエリ条件を満たします。 |
getTotalCount | クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメーターのデフォルト値は false で、クエリ条件を満たす行の総数は返されません。 このパラメーターを true に設定すると、クエリのパフォーマンスが低下します。 |
weight | BM25 ベースのキーワード関連性スコアを計算するために、クエリ対象の列に割り当てる重み。このパラメーターは、全文検索シナリオで使用されます。クエリ対象の列に高い重みを指定すると、行の BM25 ベースのキーワード関連性スコアが高くなります。このパラメーターの値は正の浮動小数点数です。 このパラメーターは、返される行の数には影響しません。ただし、このパラメーターは、クエリ結果の BM25 ベースのキーワード関連性スコアに影響します。 |
tableName | データテーブルの名前。 |
indexName | 検索インデックスの名前。 |
columnsToGet | クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメーターには、returnAll フィールドと columns フィールドを指定できます。 returnAll フィールドのデフォルト値は false で、すべての列が返されるわけではないことを示します。この場合、columns フィールドを使用して、返す列を指定できます。返す列を指定しない場合は、プライマリキー列のみが返されます。 returnAll フィールドを true に設定すると、すべての列が返されます。 |
サンプルコード
次のサンプルコードは、テーブル内の Col_Keyword 列の値が「hangzhou」と完全に一致する行をクエリする方法の例を示しています。
/**
* テーブル内の Col_Keyword 列の値が「hangzhou」と完全に一致する行をクエリします。
* @param client
*/
private static void termQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
TermQuery termQuery = new TermQuery(); // クエリタイプを TermQuery に設定します。
termQuery.setFieldName("Col_Keyword"); // 一致させるフィールドの名前を設定します。
termQuery.setTerm(ColumnValue.fromString("hangzhou")); // 一致させる値を設定します。
searchQuery.setQuery(termQuery);
//searchQuery.setGetTotalCount(true); //GetTotalCount パラメーターを 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());
}
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。用語クエリ、複数用語クエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、地理クエリ、KNN ベクタークエリ、ブールクエリ、ネストされたクエリ、存在クエリ。検索インデックスを作成した後、検索インデックスによって提供されるクエリメソッドを使用して、ビジネス要件に基づいて複数のディメンションからデータをクエリできます。
並べ替え機能とページング機能を使用して、クエリ条件を満たす行を並べ替えたりページネーションしたりできます。詳細については、並べ替えとページングの実行を参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
テーブル内のデータを分析する場合、Search 操作を呼び出して集計機能を使用するか、SQL クエリ機能を使用できます。たとえば、最大値と最小値、値の合計、行数をクエリできます。詳細については、集計およびSQL クエリを参照してください。
行を並べ替えることなく、クエリ条件を満たすすべての行を取得する場合、ParallelScan 操作と ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。