一致フレーズクエリは一致クエリに似ていますが、一致フレーズクエリはトークンの位置を評価する点が異なります。行がクエリ条件を満たすのは、行内のトークンの順序と位置が、キーワードに含まれるトークンの順序と位置に一致する場合のみです。クエリ対象のフィールドのトークン化方法がファジートークン化の場合、一致フレーズクエリはワイルドカードクエリよりも低いレイテンシで実行されます。
シナリオ
一致フレーズクエリを使用すると、単語が特定の順序で配置された特定のフレーズを含むデータを検索できます。一致フレーズクエリをトークン化と組み合わせて使用すると、ビッグデータ分析、コンテンツ検索、パーソナライズされたレコメンデーションなどの特定のシナリオで全文検索を実行できます。たとえば、コンテンツ検索で特定のフレーズを含む文をクエリしたり、チャットレコードで特定の順序で配置されたメッセージを見つけたりできます。
機能
一致フレーズクエリは、近似一致を使用してデータをクエリし、トークンの位置を評価します。たとえば、行の TEXT タイプの列の値が「杭州西湖風景区」で、指定したキーワードが「杭州風景区」であるとします。一致クエリを使用すると、Tablestore は行を返します。ただし、一致フレーズクエリを使用すると、Tablestore は行を返しませ ん。キーワードの「杭州」と「風景区」の間の距離は 0 ですが、この行の列の距離は 2 です。これは、「杭州」と「風景区」の間に「西湖」という 2 つの単語が存在するためです。
一致フレーズクエリを使用する場合は、クエリ対象のフィールドの名前とキーワードを指定する必要があります。行がクエリ条件を満たすのは、行内のトークンの順序と位置が、キーワードに含まれるトークンの順序と位置に一致する場合のみです。
一致フレーズクエリを実行するときは、クエリ対象のフィールドに割り当てる重みを指定して BM25 ベースのキーワード関連性スコアを計算したり、返す列を指定したり、クエリ条件を満たす行の総数を返すかどうかを指定したり、返された行のソート方法を指定したりできます。
API操作
SearchまたはParallelScan操作を呼び出し、クエリタイプをMatchPhraseQueryに設定して、一致フレーズクエリを実行できます。
パラメータ
パラメータ | 説明 |
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 に設定すると、すべての列が返されます。 |
使用上の注意
検索インデックスを使用して、BM25 ベースのキーワード関連性スコアに基づいてクエリ結果をソートできます。カスタム関連性スコアを指定してクエリ結果をソートすることはできません。
方法
Tablestore コンソール、Tablestore CLI、または 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ベクトル検索、存在クエリ。ビジネス要件に基づいてクエリ方法を選択し、複数のディメンションからデータをクエリできます。
ソート機能とページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、ソートとページングの実行を参照してください。
collapse(distinct)機能を使用して、特定の列に基づいて結果セットを折りたたむことができます。このようにして、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(個別)を参照してください。
データテーブルのデータを分析する場合は、Search 操作の集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値、最大値、合計、行の総数などを取得できます。詳細については、集計とSQL クエリを参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行を取得する場合は、ParallelScan 操作と ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。詳細については、並列スキャンを参照してください。