ブールクエリは、1 つ以上のサブクエリで構成されます。Tablestore は、指定されたサブクエリの条件を満たす行を返します。サブクエリは、ブールクエリを含む任意のタイプにすることができます。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化する を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれていること。詳細については、データテーブルを作成する および データを書き込む を参照してください。
データテーブルの検索インデックスが作成されていること。詳細については、検索インデックスを作成する を参照してください。
パラメータ
パラメータ | 説明 |
MustQueries | サブクエリの条件のリスト。すべてのサブクエリの条件を満たす行のみが返されます。このパラメータは AND 演算子と同等です。 |
MustNotQueries | サブクエリの条件のリスト。サブクエリの条件を満たさない行のみが返されます。このパラメータは NOT 演算子と同等です。 |
FilterQueries | サブクエリの条件のリスト。すべてのサブフィルタを満たす行のみが返されます。フィルタはクエリに似ていますが、行が満たすサブフィルタの数に基づいて、フィルタでは関連性スコアが計算されない点が異なります。 |
ShouldQueries | サブクエリの条件のリスト。クエリ結果を返すために、すべてのサブクエリの条件を満たす必要はありません。このパラメータは OR 演算子と同等です。 ShouldQueries パラメータで指定された最小数のサブクエリの条件を満たす行のみが返されます。 全体的な関連性スコアが高いほど、ShouldQueries パラメータで指定されたサブクエリの条件が多く満たされていることを示します。 |
MinimumShouldMatch | 返される行が満たす必要がある ShouldQueries パラメータで指定されたサブクエリの条件の最小数。ShouldQueries パラメータで指定されたサブクエリの条件以外のサブクエリの条件が指定されていない場合、MinimumShouldMatch パラメータのデフォルト値は 1 です。MustQueries、MustNotQueries、または FilterQueries パラメータで指定されたサブクエリの条件など、他のサブクエリの条件が指定されている場合、MinimumShouldMatch パラメータのデフォルト値は 0 です。 |
TableName | データテーブルの名前。 |
IndexName | 検索インデックスの名前。 |
ColumnsToGet | クエリ条件を満たす行のすべての列を返すかどうかを指定します。ReturnAll、Columns、および ReturnAllFromIndex パラメータを指定できます。 ReturnAll のデフォルト値は false で、すべての列が返されないことを指定します。次のいずれかの方法を使用して、返す列を指定できます。次の方法を使用して返す列を指定しない場合、主キー列のみが返されます。
ReturnAll を true に設定すると、すべての列が返されます。 |
例
次のサンプルコードは、ブールサブクエリで構成されるブールクエリを実行する方法を示しています。この例では、Keyword_type_col 列の値が「SearchIndex」または「TableStore」である行がクエリされます。検索インデックスのすべての列が返されます。
/// <summary>
/// ブールクエリには、1 つ以上のサブクエリが含まれています。各サブクエリには独自のタイプがあります。
/// MustQueries:行はすべてのサブクエリの条件を満たす必要があります。
/// ShouldQueries:ShouldQueries パラメータで複数の条件が指定されています。行が少なくとも 1 つの条件を満たしている場合、その行はクエリ条件を満たしています。
/// MustNotQueries:行は条件を満たしてはなりません。
/// MinimumShouldMatch:行は最小数の条件を満たす必要があります。
/// </summary>
/// <param name="otsClient"></param>
public static void BoolQuery(OTSClient otsClient)
{
Console.WriteLine("\n ブールクエリを開始しています...");
var searchQuery = new SearchQuery();
// クエリ条件を満たす行の総数を返します。
searchQuery.GetTotalCount = true;
var boolQuery = new BoolQuery();
var shouldQuerys = new List<IQuery>();
shouldQuerys.Add(new TermQuery(Keyword_type_col, new ColumnValue("SearchIndex")));
shouldQuerys.Add(new TermQuery(Keyword_type_col, new ColumnValue("TableStore")));
boolQuery.ShouldQueries = shouldQuerys;
boolQuery.MinimumShouldMatch = 1;
searchQuery.Query = boolQuery;
var request = new SearchRequest(TableName, IndexName, searchQuery);
// ColumnsToGet パラメータを指定して、指定した列、クエリ条件を満たす行のすべての列、または検索インデックスのすべての列を返すことができます。このパラメータを指定しない場合、主キー列のみが返されます。
request.ColumnsToGet = new ColumnsToGet()
{
// 検索インデックスのすべての列を返します。
ReturnAllFromIndex = true
// 指定した列を返します。
//Columns = new List<string>() { Long_type_col, Text_type_col, Keyword_type_col }
// クエリ条件を満たす行のすべての列を返します。
//ReturnAll = true
};
var response = otsClient.Search(request);
Console.WriteLine("合計数:" + response.TotalCount); // 返された行の数ではなく、クエリ条件を満たす行の総数を表示します。
foreach (var row in response.Rows)
{
PrintRow(row);
}
}
FAQ
参考資料
検索インデックスを使用してデータをクエリする場合、次のクエリメソッドを使用できます。タームクエリ、タームズクエリ、すべて一致クエリ、一致クエリ、一致フレーズクエリ、プレフィックスクエリ、範囲クエリ、ワイルドカードクエリ、ブールクエリ、ジオクエリ、ネストクエリ、存在クエリ。ビジネス要件に基づいて、さまざまなクエリメソッドを使用して複数のディメンションからデータをクエリできます。
ソート機能とページング機能を使用して、クエリ条件を満たす行をソートまたはページングできます。詳細については、ソートとページング を参照してください。
特定の列に基づいて結果セットを折りたたむには、折りたたみ(重複排除)機能を使用できます。このようにして、指定されたタイプのデータはクエリ結果に一度だけ表示されます。詳細については、折りたたみ(重複排除) を参照してください。
データテーブルのデータを分析する場合、Search オペレーションの集計機能を使用するか、SQL ステートメントを実行できます。たとえば、最小値と最大値、合計、行の総数などを取得できます。詳細については、集計 および SQL クエリ を参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行を取得する場合、ParallelScan および ComputeSplits オペレーションを呼び出して並列スキャン機能を使用できます。詳細については、並列スキャン を参照してください。