Tablestore SDK for Java の match クエリは、Text または Keyword フィールドを検索し、一致条件を満たす行を関連度スコアとともに返します。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
機能の説明
match クエリは、Text または Keyword フィールドを検索します。 フィールドタイプについての詳細は、「文字列型」をご参照ください。 これら 2 つのフィールドタイプでは、以下のように一致判定の動作が異なります:
Text: フィールド値とクエリテキストは、検索インデックスの作成時に設定されたアナライザーを使用して分析されます。アナライザーが設定されていない場合、デフォルトで単一ワードのトークン化が使用されます。デフォルトのOR演算子は、いずれかのクエリトークンを含むフィールド値に一致しますが、AND演算子を使用すると、すべてのクエリトークンを必須にしたり、一致する必要があるトークンの最小数を指定したりできます。Keyword:フィールド値とクエリテキストはどちらも分析されません。 フィールド値全体がクエリテキストと等しい場合にのみ、行が一致します。
マッチクエリでは、一致するトークンが隣接している必要も、クエリテキストと同じ順序である必要もありません。トークンを順序通りに一致させるには、マッチフレーズクエリを使用します。Text フィールドでファジーアナライザーを使用していて、高性能なファジー検索が必要な場合も、マッチフレーズクエリの使用が推奨されます。
以下の例では、description フィールドに tablestore または durable トークンが含まれる行をクエリし、最大 10 行、一致する行の総数、および関連性スコアを返します。
String tableName = "example_table";
String indexName = "example_index";
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable");
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
searchQuery.setSort(new Sort(Collections.singletonList(new ScoreSort())));
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);
for (SearchHit hit : response.getSearchHits()) {
System.out.println(hit.getRow());
System.out.println(hit.getScore());
}
パラメーター
検索リクエスト
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 は、次のパラメーターを含む MatchQuery オブジェクトです。
|
名前 |
タイプ |
説明 |
|
fieldName (必須) |
String |
クエリ対象の |
|
text (必須) |
String |
クエリテキスト。 |
|
operator (任意) |
QueryOperator |
クエリトークンを組み合わせるための演算子です。 |
|
minShouldMatch (任意) |
String または int |
|
|
weight (任意) |
float |
クエリの重み。デフォルト値は |
setMinimumShouldMatch(Integer) は非推奨です。setMinShouldMatch(int) または setMinShouldMatch(String) を使用してください。
返す列
request.columnsToGet は、以下のパラメーターを含む SearchRequest.ColumnsToGet オブジェクトです。
|
名前 |
タイプ |
説明 |
|
columns (任意) |
|
返す属性列。 このパラメーターは、 |
|
returnAll (任意) |
boolean |
テーブル内のすべての属性列を返すかどうかを指定します。デフォルト値は |
|
returnAllFromIndex (任意) |
boolean |
インデックス化されたすべての属性列を返すかどうかを指定します。デフォルト値は |
戻り値
クエリのレスポンス
search メソッドは SearchResponse オブジェクトを返します。以下の表では、主なフィールドについて説明します。
|
名前 |
タイプ |
説明 |
|
totalCount |
long |
一致する行の数。 |
|
rows |
|
現在のレスポンスで返された行。 |
|
searchHits |
|
クエリがヒットします。 |
|
nextToken |
byte[] |
次のページトークン。 |
|
isAllSuccess |
boolean |
すべてのインデックスパーティションのクエリが成功したかどうかを示します。 |
検索ヒット
response.searchHits[]は、以下の主要なフィールドを含む SearchHit オブジェクトです。
|
名前 |
タイプ |
説明 |
|
row |
Row |
一致する行です。値を取得するには |
|
score |
Double |
関連性スコアです。 |
|
highlightResultItem |
HighlightResultItem |
概要とハイライト結果。 |
例
すべてのクエリトークンとの一致
フィールド値にすべてのクエリートークンが含まれている場合にのみ行が一致するようにするには、operator を AND に設定します。
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable");
matchQuery.setOperator(QueryOperator.AND);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);
一致するトークンの最小数の設定
OR 演算子を使用する場合は、minShouldMatch を設定して、一致が必要なクエリトークンの最小数を指定します。 次の例では、少なくとも 2 つのトークンが一致する必要があります。
MatchQuery matchQuery = new MatchQuery();
matchQuery.setFieldName("description");
matchQuery.setText("tablestore durable cloud");
matchQuery.setOperator(QueryOperator.OR);
matchQuery.setMinShouldMatch(2);
SearchQuery searchQuery = new SearchQuery();
searchQuery.setQuery(matchQuery);