Tablestore SDK for Java を使用したワイルドカード検索では、* と ? のパターンを使用して、Keyword、Text、または FuzzyKeyword フィールドのデータを照合します。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
機能の説明
ワイルドカード検索は、ワイルドカードを含むパターンに対してインデックスフィールドを照合します。その照合セマンティクスは SQL の LIKE に似ていますが、パターンではワイルドカードとして * と ? を使用します。Keyword または FuzzyKeyword フィールドの場合、パターンはフィールド値全体と照合されます。Text フィールドの場合、パターンはフィールド値から生成された各トークンと照合され、パターン自体はトークン化されません。サポートされているフィールドタイプの詳細については、「文字列型」をご参照ください。照合では大文字と小文字が区別されます。
パターンはワイルドカードで始めることができ、以下のワイルドカードをサポートしています:
*は、0 個以上の文字に一致します。?は、任意の 1 文字に一致します。
たとえば、table*e は tablestore に一致します。パターン hang*u は hangu と hangzhou に一致します。パターン hang?u は hangxu には一致しますが、hangu には一致しません。
*word* パターン (SQL の WHERE field_a LIKE '%word%' に相当) のように、指定された文字列を含む値を照合するには、トークンベースのワイルドカード検索を使用します。このアプローチでは、データ量が増加してもクエリパフォーマンスは低下しません。
パターンに一致するデータを除外するには、WildcardQuery オブジェクトを BoolQuery.mustNotQueries に追加します。この構成は、SQL の NOT LIKE 演算子に相当します。BoolQuery の構成については、「ブールクエリ」をご参照ください。
search を呼び出す際に、クエリタイプを WildcardQuery に設定します。SearchQuery を使用して、結果の上限、合計数の追跡、およびその他の一般的なクエリ設定を構成します。
SearchResponse search(SearchRequest request)
次の例では、product_name フィールド内の Keyword 値のうち、table*e パターンに一致するものをクエリします。このクエリは最大 10 行と一致した合計数を返します。
String tableName = "example_table";
String indexName = "example_index";
WildcardQuery wildcardQuery = new WildcardQuery();
wildcardQuery.setFieldName("product_name");
wildcardQuery.setValue("table*e");
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(wildcardQuery);
searchQuery.setLimit(10);
searchQuery.setTrackTotalCount(SearchQuery.TRACK_TOTAL_COUNT);
SearchRequest request = new SearchRequest(tableName, indexName, searchQuery);
SearchRequest.ColumnsToGet columnsToGet = new SearchRequest.ColumnsToGet();
columnsToGet.setReturnAll(true);
request.setColumnsToGet(columnsToGet);
SearchResponse response = client.search(request);
System.out.println(response.getTotalCount());
System.out.println(response.getRows());
パラメーター
検索リクエスト
request は、以下のパラメーターを含む SearchRequest オブジェクトです。
|
名前 |
タイプ |
説明 |
|
tableName (必須) |
String |
データテーブルの名前。 |
|
indexName (必須) |
String |
検索インデックスの名前です。 |
|
searchQuery (必須) |
SearchQuery |
クエリ条件と一般的なクエリ設定。 |
|
columnsToGet (オプション) |
SearchRequest.ColumnsToGet |
返す列。このパラメーターが構成されていない場合、プライマリキー列のみが返されます。 |
|
timeoutInMillisecond (オプション) |
int |
リクエストレベルのクエリタイムアウト (ミリ秒単位)。デフォルト値は |
|
routingValues (オプション) |
|
カスタムルートフィールドに対応するプライマリキー値。カスタムルーティングが構成されていない場合は、このパラメーターを設定しないでください。 |
クエリ設定
request.searchQuery は、以下のパラメーターを含む SearchQuery オブジェクトです。
|
名前 |
タイプ |
説明 |
|
query (必須) |
Query |
クエリ条件。ワイルドカード検索の場合、このパラメーターを |
|
offset (オプション) |
Integer |
クエリの開始位置。 |
|
limit (オプション) |
Integer |
返す行の最大数。行を返さない場合は、このパラメーターを |
|
highlight (オプション) |
Highlight |
|
|
collapse (オプション) |
Collapse |
指定されたフィールドで結果を重複排除するフィールドの折りたたみ設定。構成の詳細については、「クエリ結果の折りたたみ」をご参照ください。 |
|
sort (オプション) |
Sort |
結果のソート順。構成の詳細については、「結果のソートとページネーション」をご参照ください。 |
|
trackTotalCount (オプション) |
int |
カウントする一致行の予想最大数。デフォルト値は |
|
filter (オプション) |
SearchFilter |
|
|
aggregationList (オプション) |
|
集約設定。構成の詳細については、「集約」をご参照ください。 |
|
groupByList (オプション) |
|
グループ化設定。構成の詳細については、「集約」をご参照ください。 |
|
token (オプション) |
byte[] |
ページネーショントークン。前の応答の |
クエリ条件
request.searchQuery.query は、以下のパラメーターを含む WildcardQuery オブジェクトです。
|
名前 |
タイプ |
説明 |
|
fieldName (必須) |
String |
クエリ対象の |
|
value (必須) |
String |
ワイルドカードを含むクエリパターン。最大長は 32 文字で、照合では大文字と小文字が区別されます。 |
|
weight (オプション) |
float |
クエリ条件の関連性の重み。値は正の浮動小数点数である必要があります。値が大きいほど、クエリ条件が BM25 関連性スコアに与える影響が大きくなります。このパラメーターは、照合や返される行数には影響しません。 |
返される列
request.columnsToGet は、以下のパラメーターを含む SearchRequest.ColumnsToGet オブジェクトです。
|
名前 |
タイプ |
説明 |
|
columns (オプション) |
|
返す属性列。 |
|
returnAll (オプション) |
boolean |
データテーブルからすべての属性列を返すかどうかを指定します。デフォルト値は |
|
returnAllFromIndex (オプション) |
boolean |
インデックス付けされたすべての属性列を返すかどうかを指定します。デフォルト値は |
戻り値
search は SearchResponse オブジェクトを返します。次の表に、主要なフィールドを示します。
|
名前 |
タイプ |
説明 |
|
totalCount |
long |
一致する行数。 |
|
rows |
|
このクエリによって返された行。 |
|
searchHits |
|
検索ヒット。 |
|
nextToken |
byte[] |
次ページのトークン。 |
|
isAllSuccess |
boolean |
すべてのインデックスパーティションが正常にクエリされたかどうかを示します。 |