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

Tablestore:接尾辞クエリ

最終更新日:Apr 03, 2025

接尾辞条件を指定することで、検索インデックス内のデータをクエリするために、接尾辞クエリを実行できます。たとえば、携帯電話番号の最後の4桁に基づいてパッケージをクエリできます。

機能概要

接尾辞クエリを使用すると、特定の接尾辞で終わるデータをクエリできます。接尾辞クエリを使用してデータをクエリする場合、接尾辞条件を指定する必要があります。

接尾辞クエリを実行して、FuzzyKeyword タイプのデータのみをクエリできます。 FuzzyKeyword は、接尾辞クエリ、プレフィックスクエリ、ワイルドカードクエリなどの機能向けに最適化されたデータ型です。 FuzzyKeyword タイプは、データサイズに関係なく、良好で安定したクエリパフォーマンスを提供します。データサイズが増加しても、クエリのパフォーマンスは低下しません。

説明
  • FuzzyKeyword フィールドでは、ソートと集約はサポートされていません。 FuzzyKeyword フィールドでソートまたは集約を実行する場合は、仮想カラム機能を使用し、FuzzyKeyword フィールドがマッピングされている仮想カラムのタイプを Keyword に設定できます。

  • 接尾辞条件に基づいて Keyword タイプのデータをクエリする場合は、データを書き込むときにデータを反転し、プレフィックスクエリを使用してデータをクエリできます。

API 操作

Search または ParallelScan 操作を呼び出し、クエリタイプを SuffixQuery に設定して、接尾辞クエリを実行できます。

パラメーター

パラメーター

説明

query

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

fieldName

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

suffix

接尾辞。

getTotalCount

クエリ条件に一致する行の総数を返すかどうかを指定します。このパラメーターのデフォルト値は false で、クエリ条件に一致する行の総数は返されません。

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

weight

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

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

tableName

データテーブルの名前。

indexName

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

columnsToGet

クエリ条件に一致する各行のすべてのカラムを返すかどうかを指定します。このパラメーターには、returnAll フィールドと columns フィールドを設定できます。

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

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

メソッド

Tablestore コンソールまたは Tablestore SDK を使用して、接尾辞クエリを実行できます。接尾辞クエリを実行する前に、以下の準備が整っていることを確認してください。

Tablestore コンソールの使用

  1. [インデックス] タブに移動します。

    1. Tablestore コンソール にログオンします。

    2. 上部のナビゲーションバーで、リソースグループとリージョンを選択します。

    3. [概要] ページで、管理するインスタンスの名前をクリックするか、インスタンスの [アクション] カラムの [インスタンスの管理] をクリックします。

    4. [インスタンスの詳細] タブの [テーブル] タブで、データテーブルの名前をクリックするか、データテーブルの [アクション] カラムの [インデックス] をクリックします。

  2. [インデックス] タブで、データのクエリに使用する検索インデックスを見つけ、[アクション] カラムの [データの管理] をクリックします。

    1. デフォルトでは、システムはすべての属性カラムを返します。特定の属性カラムを返すには、[すべてのカラム] をオフにして、返す属性カラムを指定します。複数の属性カラムはコンマ (,) で区切ります。

      説明

      デフォルトでは、システムはデータテーブルのすべてのプライマリキーカラムを返します。

    2. ビジネス要件に基づいて、[and][or]、または [not] 論理演算子を選択します。

      [and] 論理演算子を選択すると、クエリ条件に一致するデータが返されます。 [or] 演算子を選択して単一のクエリ条件を指定すると、そのクエリ条件に一致するデータが返されます。 Or 論理演算子を選択して複数のクエリ条件を指定すると、いずれかのクエリ条件に一致するデータが返されます。 [not] 論理演算子を選択すると、クエリ条件に一致しないデータが返されます。

    3. FuzzyKeyword タイプのフィールドを選択し、[追加] をクリックします。

    4. [クエリタイプ] ドロップダウンリストから [suffixquery(suffixquery)] を選択し、フィールド値を指定します。

    5. デフォルトでは、ソート機能は無効になっています。特定のフィールドに基づいてクエリ結果をソートする場合は、[ソート] をオンにして、クエリ結果をソートするフィールドとソート順を指定します。

    6. デフォルトでは、集約機能は無効になっています。特定のフィールドの統計を収集する場合は、[統計を収集] をオンにして、統計を収集するフィールドを指定し、統計を収集するために必要な情報を設定します。

  3. [OK] をクリックします。

    クエリ条件に一致するデータが、[インデックス] タブに指定された順序で表示されます。

Tablestore SDK の使用

Tablestore SDK for Java を使用して、接尾辞クエリを実行できます。

重要
  • Tablestore SDK for Java V5.17.0 以降では、接尾辞クエリがサポートされています。

  • Tablestore SDK を使用して接尾辞クエリを実行するには、クライアントを初期化する必要があります。詳細については、「Tablestore クライアントを初期化する」をご参照ください。

次のサンプルコードは、Col_FuzzyKeyword カラムの値に "hangzhou" 接尾辞が含まれる行をクエリする方法の例を示しています。

/**
 * Col_FuzzyKeyword カラムの値に "hangzhou" 接尾辞が含まれる行をクエリします。
 * @param client
 */
private static void suffixQuery(SyncClient client) {
    SearchQuery searchQuery = new SearchQuery();
    SuffixQuery suffixQuery = new SuffixQuery(); // クエリタイプを SuffixQuery に設定します。
    searchQuery.setGetTotalCount(true);
    suffixQuery.setFieldName("Col_FuzzyKeyword");
    suffixQuery.setSuffix("hangzhou");
    searchQuery.setQuery(suffixQuery);
    //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("Col_FuzzyKeyword")); // 返すカラムを指定します。
    searchRequest.setColumnsToGet(columnsToGet);

    SearchResponse resp = client.search(searchRequest);
    //System.out.println("TotalCount: " + resp.getTotalCount()); // 返される行数ではなく、一致する行の総数が表示されるように指定します。
    System.out.println("Row: " + resp.getRows());
}

課金ルール

検索インデックスを使用してデータをクエリする場合、消費された読み取りスループットに対して課金されます。詳細については、「検索インデックスの課金対象項目」をご参照ください。

FAQ

関連情報