すべてのプロダクト
Search
ドキュメントセンター

Tablestore:一致クエリ

最終更新日:Dec 28, 2024

一致クエリ (MatchQuery) を使用して、おおよその一致に基づいてテーブル内のデータをクエリできます。Tablestoreは、指定したアナライザータイプに基づいて、TEXT列の値と一致クエリを実行するために使用するキーワードをトークン化します。このようにして、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());
}
            

FAQ

関連情報