ワイルドカードクエリを使用してあいまいクエリを実行できます。ワイルドカードクエリはLIKE演算子に似ており、テキスト内の単語または句を含むデータをクエリするために使用できます。
NOT LIKE演算子を使用する場合は、ワイルドカードクエリをブールクエリのmustNotQueriesパラメータと一緒に使用する必要があります。詳細については、ブールクエリを参照してください。
機能概要
ワイルドカードクエリでは、特定の記号を使用してあいまい一致を実行できます。これにより、データ検索の精度と効率が向上します。
ワイルドカードクエリを使用してデータをクエリする場合、アスタリスク(*)および疑問符(?)ワイルドカード文字を含む文字列を使用して、データと一致させることができます。アスタリスク(*)ワイルドカード文字は、検索語の前、後、または任意の位置にある任意の長さの文字列と一致します。疑問符(?)ワイルドカード文字は、特定の位置にある1文字と一致します。クエリ文字列は、アスタリスク(*)または疑問符(?)で始めることができます。たとえば、table*e
文字列を検索すると、tablestore
が一致となります。
Keyword型とFuzzyKeyword型は、ワイルドカードクエリをサポートしています。
Keyword:文字列の基本データ型。Keyword型を使用する場合、中規模および大規模データに対するワイルドカードクエリなどのあいまいクエリの性能は低くなります。データサイズが大きくなると、性能は低下します。
FuzzyKeyword:ワイルドカードクエリなどのあいまいクエリ用に最適化されたデータ型。FuzzyKeyword型は、データサイズに関係なく、Keyword型よりも優れた安定したクエリ性能を提供します。データサイズが大きくなっても、性能は低下しません。
さまざまなシナリオであいまいクエリの要件を満たすために、検索インデックスは3種類のワイルドカードクエリを提供します。次の表に、3種類のワイルドカードクエリを示します。
このトピックでは、Keyword型とFuzzyKeyword型に基づくワイルドカードクエリについて説明します。Text型に基づくあいまいクエリの詳細については、あいまいクエリを参照してください。
データ型 | クエリメソッド | 利点 | 欠点 |
Keyword | WildcardQuery | Elasticsearchとの互換性 | インデックスデータのサイズが大きくなると、クエリ性能が低下します。 |
FuzzyKeyword | WildcardQuery | 性能が良好で安定しており、データサイズが大きくなっても低下しません。 | データの拡張が発生します。 |
Text | MatchPhraseQuery | Text型のデータでは大文字と小文字を区別しないようにできます。 | データの拡張が発生します。 |
使用上の注意
Keyword型またはFuzzyKeyword型のデータに対するワイルドカードクエリにおけるクエリ文字列の長さは、32文字を超えることはできません。
API操作
ワイルドカードクエリを実行するには、Search操作またはParallelScan操作を呼び出し、クエリタイプをWildcardQueryに設定します。
パラメータ
パラメータ | 説明 |
fieldName | クエリするフィールドの名前。 |
value | ワイルドカード文字を含む文字列。文字列は32文字を超えることはできません。 |
query | クエリのタイプ。このパラメータをWildcardQueryに設定します。 |
getTotalCount | クエリ条件を満たす行の総数を返すかどうかを指定します。このパラメータのデフォルト値はfalseで、クエリ条件を満たす行の総数は返されません。 このパラメータをtrueに設定すると、クエリ性能が低下します。 |
weight | BM25ベースのキーワード関連性スコアを計算するために、クエリするフィールドに割り当てる重み。このパラメータは、全文検索シナリオで使用されます。クエリするフィールドに高い重みを指定すると、そのフィールドのBM25ベースのキーワード関連性スコアが高くなります。このパラメータの値は正の浮動小数点数です。 このパラメータは、返される行数には影響しませんが、クエリ結果のBM25ベースのキーワード関連性スコアに影響します。 |
tableName | データテーブルの名前。 |
indexName | 検索インデックスの名前。 |
columnsToGet | クエリ条件を満たす各行のすべての列を返すかどうかを指定します。このパラメータには、returnAllフィールドとcolumnsフィールドを設定できます。 returnAllフィールドのデフォルト値はfalseで、すべての列が返されるわけではないことを指定します。この場合、columnsフィールドを使用して、返す列を指定できます。返す列を指定しない場合は、主キー列のみが返されます。 returnAllフィールドをtrueに設定すると、すべての列が返されます。 |
メソッド
Tablestoreコンソール、Tablestore CLI、またはTablestore SDKを使用して、ワイルドカードクエリを実行できます。ワイルドカードクエリを実行する前に、次の準備が整っていることを確認してください。
FuzzyKeyword型のデータに対してワイルドカードクエリを実行するには、Tablestore SDKのみを使用できます。
Tablestoreで操作を実行する権限を持つAlibaba CloudアカウントまたはRAMユーザーを持っている。RAMユーザーにTablestore操作権限を付与する方法については、RAMポリシーを使用してRAMユーザーに権限を付与するを参照してください。
Tablestore SDKまたはTablestore CLIを使用してクエリを実行する場合は、Alibaba CloudアカウントまたはRAMユーザーのAccessKeyペアが作成されます。詳細については、AccessKeyペアを作成するを参照してください。
データテーブルが作成されている。詳細については、テーブルの操作を参照してください。
データテーブルの検索インデックスが作成されている。詳細については、検索インデックスを作成するを参照してください。
Tablestore SDKを使用してクエリを実行する場合は、OTSClientインスタンスが初期化されている。詳細については、OTSClientインスタンスを初期化するを参照してください。
Tablestore CLIを使用してクエリを実行する場合は、Tablestore CLIがダウンロードされて起動され、アクセスするインスタンスとデータテーブルに関する情報が設定されている。詳細については、Tablestore CLIをダウンロードする、Tablestore CLIを起動してアクセス情報を設定する、およびデータテーブルの操作を参照してください。
課金ルール
検索インデックスを使用してデータをクエリする場合、消費される読み取りスループットに対して課金されます。詳細については、検索インデックスの課金対象項目を参照してください。
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。タームクエリ、タームズクエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、あいまいクエリ、ブールクエリ、ジオクエリ、ネストされたクエリ、KNNベクトル検索、存在クエリ。ビジネス要件に基づいてクエリメソッドを選択し、複数のディメンションからデータをクエリできます。
並べ替え機能とページング機能を使用して、クエリ条件を満たす行を並べ替えたりページネーションしたりできます。詳細については、並べ替えとページングの実行を参照してください。
折りたたみ(重複排除)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。このようにして、指定されたタイプのデータはクエリ結果に1回だけ表示されます。詳細については、折りたたみ(重複排除)を参照してください。
データテーブルのデータを分析する場合は、Search操作の集計機能を使用するか、SQLステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計とSQLクエリを参照してください。
行を並べ替えることなく、クエリ条件を満たすすべての行を取得する場合は、ParallelScan操作とComputeSplits操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。