Use a nested query in the Tablestore SDK for Go to match conditions within the same child row of a Nested field.
Prerequisites
Install the Tablestore Go SDK and initialize a client.
Description
Each child row in a Nested field is indexed as an independent nested document. A nested query ensures that conditions on multiple child fields match within the same child row and avoids cross-child-row matches.
func (client *tablestore.TableStoreClient) Search(request *tablestore.SearchRequest) (*tablestore.SearchResponse, error)
The following example queries data and returns up to 10 rows and the total number of matched rows.
tableName := "example_table"
indexName := "example_index"
query := &search.NestedQuery{Path: "items", Query: &search.TermQuery{FieldName: "items.name", Term: "alice"}, ScoreMode: search.ScoreMode_Avg}
searchQuery := search.NewSearchQuery().
SetQuery(query).
SetLimit(10).
SetGetTotalCount(true)
response, err := client.Search(&tablestore.SearchRequest{
TableName: tableName,
IndexName: indexName,
SearchQuery: searchQuery,
ColumnsToGet: &tablestore.ColumnsToGet{
ReturnAllFromIndex: true,
},
})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.TotalCount)
fmt.Println(response.Rows)
Parameters
Query request
request is of the tablestore.SearchRequest type and contains the following parameters.
|
Name |
Type |
Description |
|
TableName (required) |
string |
The name of the data table. |
|
IndexName (required) |
string |
The name of the search index. |
|
SearchQuery (required) |
search.SearchQuery |
The query condition and common query configurations. |
|
ColumnsToGet (optional) |
*tablestore.ColumnsToGet |
The return-column configuration. If this parameter is omitted, only primary key columns are returned. |
|
RoutingValues (optional) |
[]*tablestore.PrimaryKey |
Primary key values for custom routing fields. Omit this parameter if custom routing is not configured. |
|
TimeoutMs (optional) |
*int32 |
The request timeout period in milliseconds. |
Query configuration
Create a query configuration by calling search.NewSearchQuery() and configure it by using the following methods.
|
Name |
Type |
Description |
|
SetQuery (required) |
search.Query |
Specifies the query condition. |
|
SetOffset (optional) |
int32 |
Specifies the start position. Default value: 0. For offset-based pagination, Offset + Limit cannot exceed 100,000. |
|
SetLimit (optional) |
int32 |
Specifies the maximum number of rows to return. Default value: 10. Maximum value: 100. A value of 0 returns no rows. |
|
SetCollapse (optional) |
*search.Collapse |
Collapses query results. For more information, see Collapse query results. |
|
SetSort (optional) |
*search.Sort |
Specifies the result sort order. For more information, see Sort and paginate results. |
|
SetGetTotalCount (optional) |
bool |
Specifies whether to count all matched rows. Default value: false. |
|
SetToken (optional) |
[]byte |
Specifies the NextToken value returned by the previous response. This method clears Sort because the token contains the previous-page sort conditions. Do not specify Offset when you use token-based pagination. |
|
SetSearchFilter (optional) |
*search.SearchFilter |
Applies a post-query filter. For more information, see Use post-query filters. |
|
Aggregation (optional) |
...search.Aggregation |
Configures aggregations. For more information, see Aggregation. |
|
GroupBy (optional) |
...search.GroupBy |
Configures grouping. For more information, see Aggregation. |
Query condition
The query is of the search.NestedQuery type and contains the following parameters.
|
Name |
Type |
Description |
|
Path (required) |
string |
The path of the Nested field. |
|
Query (required) |
search.Query |
The query on child fields. Use a full path such as |
|
ScoreMode (optional) |
search.ScoreMode |
The method used to combine scores from matching child rows. |
|
InnerHits (optional) |
*search.InnerHits |
Returns matching child rows and can configure pagination, sorting, and highlighting for the child rows. |
Inner hits configuration
InnerHits contains the following parameters.
|
Name |
Type |
Description |
|
Offset (optional) |
*int32 |
The start position of matching child rows. |
|
Limit (optional) |
*int32 |
The number of matching child rows to return. Default value: 3. |
|
Sort (optional) |
*search.Sort |
The sort order of matching child rows. |
|
Highlight (optional) |
*search.Highlight |
The summary and highlighting configuration for Nested child fields. For more information, see Summary and highlighting. |
Columns to return
request.ColumnsToGet is of the tablestore.ColumnsToGet type and contains the following parameters.
|
Name |
Type |
Description |
|
Columns (optional) |
[]string |
The attribute columns to return. This parameter takes effect only when ReturnAll and ReturnAllFromIndex are both false. |
|
ReturnAll (optional) |
bool |
Specifies whether to return all attribute columns in the data table. Default value: false. |
|
ReturnAllFromIndex (optional) |
bool |
Specifies whether to return all indexed attribute columns. Default value: false. Do not set this parameter and ReturnAll to true at the same time. |
Response
The Search method returns a tablestore.SearchResponse value. The following table describes the core business fields.
|
Name |
Type |
Description |
|
TotalCount |
int64 |
The total number of matched rows. The value depends on SetGetTotalCount. |
|
Rows |
[]*tablestore.Row |
The rows returned by the current query. The number does not exceed the value specified by SetLimit. |
|
SearchHits |
[]*tablestore.SearchHit |
The search hits. Read this field when you use highlighting, nested inner hits, or relevance scores. |
|
NextToken |
[]byte |
The token for the next page. If the value is not empty, pass it to the next query. |
|
IsAllSuccess |
bool |
Indicates whether all index partitions were queried. If the value is false, partial results are returned and TotalCount may be less than the actual number of matched rows. |
|
AggregationResults |
search.AggregationResults |
The aggregation results. |
|
GroupByResults |
search.GroupByResults |
The grouping results. |