Tablestore SDK for Go を使用して、フィールド値、関連性スコア、プライマリキー、または地理距離で結果を並べ替え、トークンを使用してページネーションを行います。
前提条件
Tablestore SDK for Go をインストールし、クライアントを初期化します。
説明
1 つ以上のソーターを設定できます。結果はソーターのリストに指定された順序で比較されます。ソーターが設定されていない場合は、検索インデックスの作成時に設定された IndexSort が使用されます。IndexSort が設定されていない場合は、デフォルトでプライマリキーによるソートが使用されます。IndexSort は、PrimaryKeySort と FieldSort のみをサポートします。インデックス作成後は、スキーマを動的に変更して IndexSort を変更できます。ScoreSort は BM25 の関連性スコアでソートし、明示的に設定した場合にのみ有効になります。
プライマリキー以外のソーターを指定すると、ソート値が同一の行の順序が一意に定まるように、サーバーはデフォルトでプライマリキーソーターを追加します。DisableDefaultPkSorter のデフォルト値は false です。トークンベースのページネーションでは、この動作を無効化しないでください。ソート値が重複している場合にプライマリキーによるソートを無効化すると、行がスキップされる可能性があります。
Nested フィールドを含む検索インデックスは IndexSort をサポートしません。このようなインデックスに対するクエリでページネーションを行うには、クエリリクエストでソートを明示的に設定してください。設定しない場合、取得可能なデータが残っていても、サーバーは NextToken を返しません。
ScoreSort を使用する場合、FuzzyKeyword フィールドはソートの対象にならず、Weight も FuzzyKeyword フィールドには効果がありません。
searchQuery := search.NewSearchQuery().
SetQuery(&search.MatchAllQuery{}).
SetLimit(10).
SetSort(&search.Sort{Sorters: []search.Sorter{
&search.FieldSort{
FieldName: "price",
Order: search.SortOrder_DESC.Enum(),
},
}})
for {
response, err := client.Search(&tablestore.SearchRequest{
TableName: "example_table",
IndexName: "example_index",
SearchQuery: searchQuery,
})
if err != nil {
log.Fatal(err)
}
for _, row := range response.Rows {
fmt.Println(row)
}
if len(response.NextToken) == 0 {
break
}
searchQuery.SetToken(response.NextToken)
}
パラメータ
ソート設定
|
名前 |
型 |
説明 |
|
Sorters (必須) |
[]search.Sorter |
ソーターです。FieldSort、ScoreSort、PrimaryKeySort、および GeoDistanceSort がサポートされ、リストの順序で適用されます。DocSort は NestedQuery.InnerHits でのみ明示的に設定でき、Search のトップレベルソーターとしては使用できません。 |
|
DisableDefaultPkSorter (任意) |
bool |
サーバーが追加するプライマリキーソーターを無効化するかどうかを指定します。デフォルト値: false。このパラメータは Tablestore SDK for Go 1.7.16 以降でサポートされています。 |
フィールド値によるソート
|
名前 |
型 |
説明 |
|
FieldName (必須) |
string |
ソートに使用するフィールドです。対象フィールドでソートと集計を有効にしておく必要があります。 |
|
Order (任意) |
search.SortOrder |
ソート順序です。有効な値は search.SortOrder_ASC と search.SortOrder_DESC です。デフォルト値: 昇順。 |
|
Mode (任意) |
search.SortMode |
多値フィールドの値の選択方法です。有効な値は search.SortMode_Min、search.SortMode_Max、および search.SortMode_Avg です。 |
|
NestedFilter (任意) |
search.NestedFilter |
Nested の子フィールドに対するソート設定です。Nested の子フィールドでソートする場合にのみ、このパラメータを指定します。 |
|
MissingValue (任意) |
interface{} |
FieldName と MissingFields で指定したフィールドがすべて存在しない場合に使用されるソート値です。search.FirstWhenMissing は、ソート順序に関係なく欠損値を先頭に配置します。search.LastWhenMissing または nil は末尾に配置します。フィールド型に応じたカスタム値を指定し、ソートに使用することもできます。 |
|
MissingField (任意) |
string |
フォールバックソートフィールドです。このパラメータは非推奨です。代わりに MissingFields を使用してください。 |
|
MissingFields (任意) |
[]string |
フォールバックソートフィールドです。FieldName で指定したフィールドが存在しない場合、リストの順序で、最初に見つかったフィールドがソートに使用されます。最大 3 つのフィールドを指定できます。これらのフィールドは FieldName で指定したフィールドと同じ型である必要があり、すべてのフィールドでソートと集計を有効にしておく必要があります。このパラメータは Tablestore SDK for Go 1.9.0 以降でサポートされています。 |
Nestedフィルター
|
名前 |
型 |
説明 |
|
Path (必須) |
string |
Nested フィールドのパスです。 |
|
Filter (必須) |
search.Query |
ソート対象の Nested 子行を絞り込むためのクエリです。すべての子行を対象にするには MatchAllQuery を使用します。 |
スコア、プライマリキー、ドキュメント順序によるソート
|
名前 |
型 |
説明 |
|
ScoreSort.Order (任意) |
search.SortOrder |
BM25 関連性スコアのソート順序です。search.NewScoreSort() は、デフォルトでスコアを降順にソートします。 |
|
PrimaryKeySort.Order (任意) |
search.SortOrder |
プライマリキーのソート順序です。search.NewPrimaryKeySort() は、デフォルトでプライマリキーを昇順にソートします。 |
|
DocSort.SortOrder (任意) |
search.SortOrder |
NestedQuery.InnerHits 内のドキュメントのソート順序です。デフォルト値: 昇順。DocSort は Tablestore SDK for Go 1.7.12 以降でサポートされています。 |
地理距離によるソート
|
名前 |
型 |
説明 |
|
FieldName (必須) |
string |
Geo-point 型フィールドの名前です。 |
|
Points (必須) |
[]string |
距離計算の基準点です。 |
|
Order (任意) |
search.SortOrder |
距離のソート順序です。search.SortOrder_ASC は近い順、search.SortOrder_DESC は遠い順にソートします。 |
|
Mode (任意) |
search.SortMode |
複数の距離が存在する場合の値の選択方法です。有効な値は search.SortMode_Min、search.SortMode_Max、および search.SortMode_Avg です。 |
|
GeoDistanceType (任意) |
search.GeoDistanceType |
距離の計算方法です。search.GeoDistanceType_ARC は球面上で距離を計算し、精度が高くなります。search.GeoDistanceType_PLANE は平面上で距離を計算し、使用するリソースが少なくなります。デフォルト値: ARC。 |
|
NestedFilter (任意) |
search.NestedFilter |
Nested 子フィールドのソートに使用するパスとフィルターです。 |
ページネーションの設定
|
名前 |
型 |
説明 |
|
Limit (任意) |
int32 |
ページあたりの最大行数です。デフォルト値: 10。通常の最大値は 100 です。返されるすべてのカラムが検索インデックスに格納されている場合、最大値を 1,000 まで増やすことができます。詳細については、「検索インデックスクエリの limit を 1,000 に増やすにはどうすればよいですか?」をご参照ください。オフセットベースのページネーションでは、Offset + Limit は 100,000 を超えられません。 |
|
Offset (任意) |
int32 |
開始位置です。デフォルト値: 0。このパラメータは 100,000 行以内の浅いページネーションに使用します。 |
|
Token (任意) |
[]byte |
前回のレスポンスの NextToken 値です。このパラメータは連続した深いページネーションに使用します。SetToken は Sort をクリアします。これは、トークンに前ページのソート条件が含まれているためです。トークンベースのページネーションでは Offset を指定しないでください。バイナリトークンを永続化する場合や、テキストプロトコル経由またはプロセス間で転送する場合は、Base64 エンコードしてください。 |
トークンベースのページネーションは、デフォルトでは前方へのみ進みます。前のページに戻るには、以前のトークンをキャッシュして再利用します。トークンベースのページネーションは、100,000 行の深さ制限の対象外です。
レスポンス
|
名前 |
型 |
説明 |
|
Rows |
[]*tablestore.Row |
現在のクエリによって返される行です。行数は Limit を超えません。 |
|
SearchHits |
[]*tablestore.SearchHit |
検索ヒットです。関連性スコア、ハイライト、または Nested InnerHits を使用する場合は、このフィールドを参照します。 |
|
TotalCount |
int64 |
一致した行の総数です。この値は SetGetTotalCount の設定に依存し、現在のページの行数とは異なります。 |
|
NextToken |
[]byte |
次ページ用のトークンです。空の場合は、これ以上データが存在しないか、現在のクエリのソート順序が一意に定まらないことを示します。 |
|
IsAllSuccess |
bool |
クエリがすべてのインデックスパーティションに対して実行されたかどうかを示します。値が false の場合、部分的な結果が返されます。 |