ブールクエリは、サブクエリの組み合わせに基づいてデータテーブル内のデータを取得します。 Tablestoreは、サブクエリの条件を満たす行を返します。 サブクエリは、ブールクエリを含む任意のタイプにすることができます。
前提条件
OTSClientインスタンスが初期化されています。 詳細については、OTSClientインスタンスの初期化を参照してください。
データテーブルが作成され、データがデータテーブルに書き込まれています。 詳細については、データテーブルの作成とデータの書き込みを参照してください。
データテーブルの検索インデックスが作成されています。 詳細については、検索インデックスの作成を参照してください。
パラメータ
パラメータ | 説明 |
tableName | データテーブルの名前。 |
indexName | 検索インデックスの名前。 |
mustQueries | クエリ結果が一致する必要があるサブクエリのリスト。 このパラメータはAND演算子と同等です。 |
mustNotQueries | クエリ結果が一致してはならないサブクエリのリスト。 このパラメータはNOT演算子と同等です。 |
filterQueries | サブクエリのリスト。 すべてのサブフィルタに一致する行のみが返されます。 フィルタはクエリに似ていますが、フィルタは、行が一致するサブフィルタの数に基づいて関連性スコアを計算しません。 |
shouldQueries | クエリ結果が一致しても一致しなくてもよいサブクエリのリスト。 このパラメータはOR演算子と同等です。 shouldQueriesで指定された最小数のサブクエリ条件を満たす行のみが返されます。 全体的な関連性スコアが高いほど、shouldQueriesで指定されたより多くのサブクエリ条件が満たされていることを示します。 |
minimumShouldMatch | 行が満たす必要がある、shouldQueriesで指定されたサブクエリ条件の最小数。 shouldQueriesで指定されたサブクエリ条件以外のサブクエリ条件が指定されていない場合、minimumShouldMatchパラメータのデフォルト値は1です。 mustQueries、mustNotQueries、filterQueriesで指定されたサブクエリ条件など、他のサブクエリ条件が指定されている場合、minimumShouldMatchパラメータのデフォルト値は0です。 |
例
次のコードは、サブクエリの組み合わせに基づいて行をクエリするためのブールクエリを構築する方法の例を示しています。
var client = require('../client');
var TableStore = require('../../index.js');
var Long = TableStore.Long;
/**
* 次の操作を実装するためにブールクエリを実行します。(col2 < 4 or col 3 < 5) or (col2 = 4 and (col3 = 5 or col3 = 6))。 次のロジックが使用されます。
* boolQuery1 = rangeQuery(col2<4) or rangeQuery(col3<5)
* boolQuery2 = termQuery(col3=5) or (col3=6)
* boolQuery3 = termQuery(col2=4) and boolquery2
* boolQuery4 = boolQuery1 or boolQuery3
*/
client.search({
tableName: "sampleTable",
indexName: "sampleSearchIndex",
searchQuery: {
offset: 0, // オフセット値をクエリします。
limit: 10, // 特定のデータを返さずにクエリ条件を満たす行の数のみをクエリするには、limitを0に設定できます。 この方法では、Tablestoreは、テーブルからの特定のデータなしで、クエリ条件を満たす行の数を返します。
getTotalCount: false, // クエリ条件を満たす行の総数を返すかどうかを指定します。 このパラメータのデフォルト値はfalseで、クエリ条件を満たす行の総数は返されないことを示します。
query: { // boolQuery4を構築します。 boolQuery1とboolQuery3の少なくとも1つを満たすクエリ条件を指定します。
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
shouldQueries: [ // mustQueries、shouldQueries、またはmustNotQueriesを指定します。
{ // boolQuery1を構築します。 クエリ条件1とクエリ条件2の少なくとも1つを満たすクエリ条件を指定します。
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
// shouldQueriesを指定して、値が4未満のcol2列を含む行、または値が5未満のcol3列を含む行をクエリします。
shouldQueries:[
{
// クエリ条件1:範囲クエリを実行して、値が4未満のcol2列を含む行をクエリします。
queryType: TableStore.QueryType.RANGE_QUERY,
query:{
fieldName: "col2",
rangeTo: 4
}
},
{
// クエリ条件2:範囲クエリを実行して、値が5未満のcol3列を含む行をクエリします。
queryType: TableStore.QueryType.RANGE_QUERY,
query:{
fieldName: "col3",
rangeTo: 5
}
}
],
minimumShouldMatch:1
}
},
{ // boolQuery3を構築します。 クエリ条件3とboolQuery2の条件を満たすクエリ条件を指定します。
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
mustQueries: [
// mustQueriesを指定して、値が4に等しいcol2列と、値が5または6に等しいcol3列を含む行をクエリします。
{
// クエリ条件3:タームクエリを実行して、値が4に等しいcol2列を含む行をクエリします。
queryType:TableStore.QueryType.TERM_QUERY,
query: {
fieldName : "col2",
term: 4
}
},
{ // boolQuery2を構築します。 クエリ条件4とクエリ条件5の少なくとも1つを満たすクエリ条件を指定します。
queryType: TableStore.QueryType.BOOL_QUERY,
query: {
// shouldQueriesを指定して、値が5または6に等しいcol3列を含む行をクエリします。
shouldQueries:[
{
// クエリ条件4:タームクエリを実行して、値が5に等しいcol3列を含む行をクエリします。
queryType: TableStore.QueryType.TERM_QUERY,
query:{
fieldName:"col3",
term: 5
}
},
{
// クエリ条件5:タームクエリを実行して、値が6に等しいcol3列を含む行をクエリします。
queryType: TableStore.QueryType.TERM_QUERY,
query:{
fieldName:"col3",
term: 6
}
}
],
minimumShouldMatch:1
}
}
]
}
}
],
minimumShouldMatch: 1 // 満たす必要がある最小条件数を指定します。 このパラメータは、サブクエリ条件がshouldQueriesによってのみ指定されている場合に有効です。
}
},
},
columnToGet: { // 返す列を指定します。 RETURN_SPECIFIEDパラメータを設定して指定された列を返すか、RETURN_ALLパラメータを設定してすべての列を返すか、RETURN_ALL_FROM_INDEXパラメータを設定して検索インデックス内のすべての列を返すか、RETURN_NONEパラメータを設定して主キー列のみを返すことができます。
returnType: TableStore.ColumnReturnType.RETURN_SPECIFIED,
returnNames: ["col2", "col3", "col4"]
}
}, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', JSON.stringify(data, null, 2));
});
FAQ
参考資料
検索インデックスでは、次のクエリタイプがサポートされています。 タームクエリ、 タームズクエリ、 すべて一致クエリ、 一致クエリ、 一致フレーズクエリ、 プレフィックスクエリ、 範囲クエリ、 ワイルドカードクエリ、 ブールクエリ、 ジオクエリ、 ネストされたクエリ、 ベクトル クエリ、 存在クエリ。 業務要件に基づいてクエリタイプを選択できます。
クエリ条件を満たす行をソートまたはページネーションする場合は、ソートおよびページネーション機能を使用できます。 詳細については、ソートとページネーションを参照してください。
特定の列に基づいて結果セットを折りたたむ場合は、折りたたみ(重複排除)機能を使用できます。 この方法では、指定されたタイプのデータはクエリ結果に1回だけ表示されます。 詳細については、折りたたみ(重複排除)を参照してください。
データテーブル内のデータ(極値、合計、行の総数など)を分析する場合は、集計操作を実行するか、SQLステートメントを実行できます。 詳細については、集計とSQLクエリを参照してください。
行をソートする必要なく、クエリ条件を満たすすべての行をすばやく取得する場合は、ParallelScanおよびComputeSplits操作を呼び出して、パラレル スキャン機能を使用できます。 詳細については、パラレル スキャンを参照してください。