ワイルドカードクエリを実行する場合、クエリでアスタリスク (*) と疑問符 (?) のワイルドカード文字を使用してデータを検索できます。アスタリスク (*) は、検索語の位置に関係なく、任意の長さの文字列に一致します。疑問符 (?) は、指定した位置の 1 文字に一致します。一致対象の文字列は、アスタリスク (*) または疑問符 (?) で開始できます。たとえば、「table*e」という文字列を検索すると、「tablestore」が一致します。
クエリパターンが *word* (SQL の WHERE field_a LIKE '%word%' と同等) の場合は、パフォーマンス向上のためにトークンベースのワイルドカードクエリ機能を使用できます。データサイズが増加しても、パフォーマンスは低下しません。
NOT LIKE 演算子を使用する場合は、BoolQuery の mustNotQueries と併用して WildcardQuery を使用する必要があります。
前提条件
-
OTSClient インスタンスが初期化されます。 詳細については、「OTSClient インスタンスを初期化する」をご参照ください。
-
データテーブルが作成され、データが書き込まれます。詳細については、「データテーブルの作成」および「データの書き込み」をご参照ください。
-
データテーブルの検索インデックスが作成されます。詳細については、「検索インデックスを作成する」をご参照ください。
パラメータ
|
パラメータ |
説明 |
|
Query |
クエリのタイプ。WildcardQuery に設定します。 |
|
FieldName |
クエリ対象の列名。 |
|
Value |
ワイルドカード文字を含む文字列。文字列の長さは 32 文字を超えることはできません。 |
|
TableName |
データテーブルの名前。 |
|
IndexName |
検索インデックスの名前。 |
|
GetTotalCount |
クエリ条件を満たす行の総数を返すかどうかを指定します。デフォルト値:false。 このパラメータを true に設定すると、クエリのパフォーマンスが低下します。 |
|
ColumnsToGet |
クエリ条件を満たす行のすべての列を返すかどうかを指定します。ReturnAll、Columns、および ReturnAllFromIndex パラメータを指定できます。 ReturnAll のデフォルト値は false で、すべての列を返さないことを示します。返す列は、次のいずれかの方法で指定できます。次の方法で返す列を指定しない場合は、プライマリキー列のみが返されます。
ReturnAll を true に設定すると、すべての列が返されます。 |
例
次のサンプルコードは、テーブル内で Keyword_type_col 列の値が "*Search*" に一致する行をクエリする方法を示します。
/// <summary>
/// テーブル内で Keyword_type_col 列の値が "*Search*" に一致する行をクエリします。
/// </summary>
/// <param name="otsClient"></param>
public static void WildcardQuery(OTSClient otsClient)
{
var searchQuery = new SearchQuery();
// クエリタイプを WildcardQuery に設定し、1 つ以上のワイルドカード文字を含む文字列を指定してワイルドカードクエリを実行します。
searchQuery.Query = new WildcardQuery(Keyword_type_col, "*Search*");
// クエリ条件を満たす行の総数を返します。
searchQuery.GetTotalCount = true;
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("Total Count:" + response.TotalCount); // 返された行数ではなく、クエリ条件を満たす行の総数を表示します。
}
よくある質問
関連ドキュメント
-
検索インデックスを使用してデータをクエリする場合は、次のクエリ方法を使用できます:term クエリ、terms クエリ、match all クエリ、match クエリ、match phrase クエリ、prefix クエリ、range クエリ、ワイルドカードクエリ、ブールクエリ、geo クエリ、nested クエリ、exists クエリ。ビジネス要件に基づき、さまざまなクエリ方法を使用して複数のディメンションからデータをクエリできます。
並べ替え機能とページ分割機能を使用して、クエリ条件を満たす行を並べ替えまたはページ分割できます。詳細については、「並べ替えとページ分割」をご参照ください。
折りたたみ (distinct) 機能を使用すると、指定した列に基づいて結果セットを折りたたむことができます。これにより、指定したタイプのデータがクエリ結果に 1 回だけ表示されるようになります。詳細については、「折りたたみ (distinct)」をご参照ください。
-
データテーブル内のデータを分析するには、Search 操作の集計機能を使用するか、SQL 文を実行することができます。たとえば、最小値と最大値、合計、総行数を取得できます。詳細については、「集計」および「SQL クエリ」をご参照ください。
-
行をソートする必要なく、クエリ条件を満たすすべての行を取得したい場合は、ParallelScan および ComputeSplits 操作を呼び出して並列スキャン機能を使用できます。 詳細については、「並列スキャン」をご参照ください。