接尾辞条件を指定することで、検索インデックス内のデータをクエリするために、接尾辞クエリを実行できます。たとえば、携帯電話番号の下4桁に基づいてパッケージをクエリできます。
機能概要
接尾辞クエリを使用して、特定の接尾辞で終わるデータをクエリできます。接尾辞クエリを使用してデータをクエリする場合、接尾辞条件を指定する必要があります。
接尾辞クエリを実行して、FuzzyKeywordタイプのデータのみをクエリできます。FuzzyKeywordは、あいまいクエリなどの機能向けに最適化されたデータ型です。FuzzyKeywordタイプは、データサイズに関係なく、良好で安定したクエリパフォーマンスを提供します。データサイズが増加しても、クエリのパフォーマンスは低下しません。
接尾辞条件に基づいて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 SDK for Javaのみを使用して、接尾辞クエリを実行できます。Tablestore SDK for Java V5.17.0以降は、接尾辞クエリをサポートしています。
接尾辞クエリを実行する前に、次の準備が整っていることを確認してください。
Alibaba CloudアカウントまたはTablestore操作権限を持つRAMユーザーが作成されていること。RAMユーザーにTablestore操作権限を付与する方法については、RAMポリシーを使用してRAMユーザーに権限を付与するを参照してください。
Tablestore SDKを使用して接尾辞クエリを実行する場合は、Alibaba CloudアカウントまたはRAMユーザーのAccessKeyペアが作成されていること。詳細については、AccessKeyペアを作成するを参照してください。
警告Alibaba CloudアカウントのAccessKeyペアが漏洩した場合、リソースが潜在的なリスクにさらされます。RAMユーザーのAccessKeyペアを使用して操作を実行することをお勧めします。これにより、Alibaba CloudアカウントのAccessKeyペアの漏洩を防ぎます。
データテーブルが作成されていること。詳細については、データテーブルの操作を参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスを作成するを参照してください。
Tablestore SDKを使用して接尾辞クエリを実行する場合は、OTSClientインスタンスが初期化されていること。詳細については、OTSClientインスタンスを初期化するを参照してください。
次のサンプルコードは、Col_FuzzyKeyword列の値に"hangzhou"という接尾辞が含まれる行をクエリする方法の例を示しています。
/**
* Col_FuzzyKeyword列の値に"hangzhou"という接尾辞が含まれる行をクエリします。
* @param client
*/
private static void suffixQuery(SyncClient client) {
SearchQuery searchQuery = new SearchQuery();
SuffixQuery suffixQuery = new SuffixQuery(); // クエリタイプをPrefixQueryに設定します。
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
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます:用語クエリ、用語クエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、あいまいクエリ、ブールクエリ、地理クエリ、ネストされたクエリ、KNNベクトル検索クエリ、存在クエリ。ビジネス要件に基づいてクエリメソッドを選択し、複数のディメンションからデータをクエリできます。
並べ替えおよびページング機能を使用して、クエリ条件を満たす行を並べ替えたりページングしたりできます。詳細については、並べ替えとページングを実行するを参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。これにより、指定されたタイプのデータはクエリ結果に1回だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
データテーブルのデータを分析する場合は、Search操作の集計機能を使用するか、SQLステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計とSQLクエリを参照してください。
行を並べ替えることなく、クエリ条件を満たすすべての行を取得する場合は、ParallelScan操作とComputeSplits操作を呼び出して、並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。