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

Tablestore:フレーズクエリの一致

最終更新日:Dec 28, 2024

フレーズクエリの一致は、一致クエリに似ていますが、フレーズクエリの一致ではトークンの位置が評価されます。行がクエリ条件を満たすのは、行内のトークンの順序と位置が、キーワードに含まれるトークンの順序と位置に一致する場合のみです。クエリ対象の列のトークン化方式がファジートークン化の場合、フレーズクエリの一致はワイルドカードクエリよりも低いレイテンシで実行されます。

前提条件

パラメータ

パラメータ

説明

fieldName

一致させるフィールドの名前。

TEXTフィールドでフレーズクエリの一致を実行できます。

text

フレーズクエリの一致を実行するときに、フィールドの値と一致させるために使用するキーワード。

一致させるフィールドがTEXTフィールドの場合、キーワードは、検索インデックスの作成時に指定したアナライザータイプに基づいて複数のトークンにトークン化されます。検索インデックスの作成時にアナライザータイプを指定しない場合は、単一単語のトークン化が実行されます。詳細については、トークン化を参照してください。

たとえば、「this is」というフレーズを使用してフレーズクエリの一致を実行すると、「...、this is tablestore」と「this is a table」が返されます。「this table is ...」または「is this a table」は返されません。

query

クエリのタイプ。クエリパラメータをmatchPhraseQueryに設定します。

offset

現在のクエリが開始される位置。

limit

現在のクエリで返す行の最大数。

クエリ条件を満たす行の数だけを特定のデータなしでクエリするには、limitパラメータを0に設定します。

getTotalCount

クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメータのデフォルト値はfalseで、クエリ条件を満たす行の総数は返されないことを指定します。

このパラメータをtrueに設定すると、クエリのパフォーマンスが低下します。

weight

BM25ベースのキーワード関連性スコアを計算するために、クエリ対象のフィールドに割り当てる重み。このパラメータは、全文検索シナリオで使用されます。クエリ対象のフィールドに高い重みを指定すると、そのフィールドのBM25ベースのキーワード関連性スコアが高くなります。このパラメータの値は正の浮動小数点数です。

このパラメータは、返される行の数には影響しません。ただし、このパラメータは、クエリ結果のBM25ベースのキーワード関連性スコアに影響します。

tableName

データテーブルの名前。

indexName

検索インデックスの名前。

columnsToGet

クエリ条件を満たす各行のすべての列を返すかどうかを指定します。 columnsToGetパラメータには、returnAllフィールドとcolumnsフィールドを指定できます。

returnAllフィールドのデフォルト値はfalseで、すべての列が返されるわけではないことを指定します。この場合、columnsフィールドを使用して、返す列を指定できます。返す列を指定しない場合は、プライマリキー列のみが返されます。

returnAllフィールドをtrueに設定すると、すべての列が返されます。

サンプルコード

次のサンプルコードは、データテーブル内のCol_Text列の値がフレーズ全体「hangzhou shanghai」と順番に一致する行をクエリする方法の例を示しています。

/**
 * データテーブル内のCol_Text列の値がフレーズ全体「hangzhou shanghai」と順番に一致する行をクエリします。Tablestoreは、クエリ条件を満たす行の総数と、これらの行の一部に関する具体的なデータを返します。
 * @param client
 */
private static void matchPhraseQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    MatchPhraseQuery matchPhraseQuery = new MatchPhraseQuery(); // クエリタイプをMatchPhraseQueryに設定します。
    matchPhraseQuery.setFieldName("Col_Text"); // クエリ対象の列の名前を指定します。
    matchPhraseQuery.setText("hangzhou shanghai"); // 一致させるキーワードを指定します。
    searchQuery.setQuery(matchPhraseQuery);
    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

関連情報