// Code generated by smithy-go-codegen DO NOT EDIT.
package cloudsearchdomain
import (
"context"
awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
"github.com/aws/aws-sdk-go-v2/aws/signer/v4"
"github.com/aws/aws-sdk-go-v2/service/cloudsearchdomain/types"
"github.com/aws/smithy-go/middleware"
smithyhttp "github.com/aws/smithy-go/transport/http"
)
// Retrieves a list of documents that match the specified search criteria. How you
// specify the search criteria depends on which query parser you use. Amazon
// CloudSearch supports four query parsers:
// - simple : search all text and text-array fields for the specified string.
// Search for phrases, individual terms, and prefixes.
// - structured : search specific fields, construct compound queries using
// Boolean operators, and use advanced features such as term boosting and proximity
// searching.
// - lucene : specify search criteria using the Apache Lucene query parser syntax.
// - dismax : specify search criteria using the simplified subset of the Apache
// Lucene query parser syntax defined by the DisMax query parser.
//
// For more information, see Searching Your Data (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching.html)
// in the Amazon CloudSearch Developer Guide. The endpoint for submitting Search
// requests is domain-specific. You submit search requests to a domain's search
// endpoint. To get the search endpoint for your domain, use the Amazon CloudSearch
// configuration service DescribeDomains action. A domain's endpoints are also
// displayed on the domain dashboard in the Amazon CloudSearch console.
func (c *Client) Search(ctx context.Context, params *SearchInput, optFns ...func(*Options)) (*SearchOutput, error) {
if params == nil {
params = &SearchInput{}
}
result, metadata, err := c.invokeOperation(ctx, "Search", params, optFns, c.addOperationSearchMiddlewares)
if err != nil {
return nil, err
}
out := result.(*SearchOutput)
out.ResultMetadata = metadata
return out, nil
}
// Container for the parameters to the Search request.
type SearchInput struct {
// Specifies the search criteria for the request. How you specify the search
// criteria depends on the query parser used for the request and the parser options
// specified in the queryOptions parameter. By default, the simple query parser is
// used to process requests. To use the structured , lucene , or dismax query
// parser, you must also specify the queryParser parameter. For more information
// about specifying search criteria, see Searching Your Data (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching.html)
// in the Amazon CloudSearch Developer Guide.
//
// This member is required.
Query *string
// Retrieves a cursor value you can use to page through large result sets. Use the
// size parameter to control the number of hits to include in each response. You
// can specify either the cursor or start parameter in a request; they are
// mutually exclusive. To get the first cursor, set the cursor value to initial .
// In subsequent requests, specify the cursor value returned in the hits section of
// the response. For more information, see Paginating Results (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/paginating-results.html)
// in the Amazon CloudSearch Developer Guide.
Cursor *string
// Defines one or more numeric expressions that can be used to sort results or
// specify search or filter criteria. You can also specify expressions as return
// fields. You specify the expressions in JSON using the form
// {"EXPRESSIONNAME":"EXPRESSION"} . You can define and use multiple expressions in
// a search request. For example: {"expression1":"_score*rating",
// "expression2":"(1/rank)*year"} For information about the variables, operators,
// and functions you can use in expressions, see Writing Expressions (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/configuring-expressions.html#writing-expressions)
// in the Amazon CloudSearch Developer Guide.
Expr *string
// Specifies one or more fields for which to get facet information, and options
// that control how the facet information is returned. Each specified field must be
// facet-enabled in the domain configuration. The fields and options are specified
// in JSON using the form
// {"FIELD":{"OPTION":VALUE,"OPTION:"STRING"},"FIELD":{"OPTION":VALUE,"OPTION":"STRING"}}
// . You can specify the following faceting options:
// - buckets specifies an array of the facet values or ranges to count. Ranges
// are specified using the same syntax that you use to search for a range of
// values. For more information, see Searching for a Range of Values (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-ranges.html)
// in the Amazon CloudSearch Developer Guide. Buckets are returned in the order
// they are specified in the request. The sort and size options are not valid if
// you specify buckets .
// - size specifies the maximum number of facets to include in the results. By
// default, Amazon CloudSearch returns counts for the top 10. The size parameter
// is only valid when you specify the sort option; it cannot be used in
// conjunction with buckets .
// - sort specifies how you want to sort the facets in the results: bucket or
// count . Specify bucket to sort alphabetically or numerically by facet value
// (in ascending order). Specify count to sort by the facet counts computed for
// each facet value (in descending order). To retrieve facet counts for particular
// values or ranges of values, use the buckets option instead of sort .
// If no facet options are specified, facet counts are computed for all field
// values, the facets are sorted by facet count, and the top 10 facets are returned
// in the results. To count particular buckets of values, use the buckets option.
// For example, the following request uses the buckets option to calculate and
// return facet counts by decade.
// {"year":{"buckets":["[1970,1979]","[1980,1989]","[1990,1999]","[2000,2009]","[2010,}"]}}
// To sort facets by facet count, use the count option. For example, the following
// request sets the sort option to count to sort the facet values by facet count,
// with the facet values that have the most matching documents listed first.
// Setting the size option to 3 returns only the top three facet values.
// {"year":{"sort":"count","size":3}} To sort the facets by value, use the bucket
// option. For example, the following request sets the sort option to bucket to
// sort the facet values numerically by year, with earliest year listed first.
// {"year":{"sort":"bucket"}} For more information, see Getting and Using Facet
// Information (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/faceting.html)
// in the Amazon CloudSearch Developer Guide.
Facet *string
// Specifies a structured query that filters the results of a search without
// affecting how the results are scored and sorted. You use filterQuery in
// conjunction with the query parameter to filter the documents that match the
// constraints specified in the query parameter. Specifying a filter controls only
// which matching documents are included in the results, it has no effect on how
// they are scored and sorted. The filterQuery parameter supports the full
// structured query syntax. For more information about using filters, see
// Filtering Matching Documents (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/filtering-results.html)
// in the Amazon CloudSearch Developer Guide.
FilterQuery *string
// Retrieves highlights for matches in the specified text or text-array fields.
// Each specified field must be highlight enabled in the domain configuration. The
// fields and options are specified in JSON using the form
// {"FIELD":{"OPTION":VALUE,"OPTION:"STRING"},"FIELD":{"OPTION":VALUE,"OPTION":"STRING"}}
// . You can specify the following highlight options:
// - format : specifies the format of the data in the text field: text or html .
// When data is returned as HTML, all non-alphanumeric characters are encoded. The
// default is html .
// - max_phrases : specifies the maximum number of occurrences of the search
// term(s) you want to highlight. By default, the first occurrence is highlighted.
// - pre_tag : specifies the string to prepend to an occurrence of a search term.
// The default for HTML highlights is . The default for text highlights is *
// .
// - post_tag : specifies the string to append to an occurrence of a search term.
// The default for HTML highlights is . The default for text highlights is
// * .
// If no highlight options are specified for a field, the returned field text is
// treated as HTML and the first match is highlighted with emphasis tags:
// search-term . For example, the following request retrieves highlights
// for the actors and title fields. { "actors": {}, "title": {"format":
// "text","max_phrases": 2,"pre_tag": "","post_tag": ""} }
Highlight *string
// Enables partial results to be returned if one or more index partitions are
// unavailable. When your search index is partitioned across multiple search
// instances, by default Amazon CloudSearch only returns results if every partition
// can be queried. This means that the failure of a single search instance can
// result in 5xx (internal server) errors. When you enable partial results, Amazon
// CloudSearch returns whatever results are available and includes the percentage
// of documents searched in the search results (percent-searched). This enables you
// to more gracefully degrade your users' search experience. For example, rather
// than displaying no results, you could display the partial results and a message
// indicating that the results might be incomplete due to a temporary system
// outage.
Partial bool
// Configures options for the query parser specified in the queryParser parameter.
// You specify the options in JSON using the following form
// {"OPTION1":"VALUE1","OPTION2":VALUE2"..."OPTIONN":"VALUEN"}. The options you can
// configure vary according to which parser you use:
// - defaultOperator : The default operator used to combine individual terms in
// the search string. For example: defaultOperator: 'or' . For the dismax parser,
// you specify a percentage that represents the percentage of terms in the search
// string (rounded down) that must match, rather than a default operator. A value
// of 0% is the equivalent to OR, and a value of 100% is equivalent to AND. The
// percentage must be specified as a value in the range 0-100 followed by the
// percent (%) symbol. For example, defaultOperator: 50% . Valid values: and , or
// , a percentage in the range 0%-100% ( dismax ). Default: and ( simple ,
// structured , lucene ) or 100 ( dismax ). Valid for: simple , structured ,
// lucene , and dismax .
// - fields : An array of the fields to search when no fields are specified in a
// search. If no fields are specified in a search and this option is not specified,
// all text and text-array fields are searched. You can specify a weight for each
// field to control the relative importance of each field when Amazon CloudSearch
// calculates relevance scores. To specify a field weight, append a caret ( ^ )
// symbol and the weight to the field name. For example, to boost the importance of
// the title field over the description field you could specify:
// "fields":["title^5","description"] . Valid values: The name of any configured
// field and an optional numeric value greater than zero. Default: All text and
// text-array fields. Valid for: simple , structured , lucene , and dismax .
// - operators : An array of the operators or special characters you want to
// disable for the simple query parser. If you disable the and , or , or not
// operators, the corresponding operators ( + , | , - ) have no special meaning
// and are dropped from the search string. Similarly, disabling prefix disables
// the wildcard operator ( * ) and disabling phrase disables the ability to
// search for phrases by enclosing phrases in double quotes. Disabling precedence
// disables the ability to control order of precedence using parentheses. Disabling
// near disables the ability to use the ~ operator to perform a sloppy phrase
// search. Disabling the fuzzy operator disables the ability to use the ~
// operator to perform a fuzzy search. escape disables the ability to use a
// backslash ( ) to escape special characters within the search string.
// Disabling whitespace is an advanced option that prevents the parser from
// tokenizing on whitespace, which can be useful for Vietnamese. (It prevents
// Vietnamese words from being split incorrectly.) For example, you could disable
// all operators other than the phrase operator to support just simple term and
// phrase queries: "operators":["and","not","or", "prefix"] . Valid values: and ,
// escape , fuzzy , near , not , or , phrase , precedence , prefix , whitespace .
// Default: All operators and special characters are enabled. Valid for: simple .
// - phraseFields : An array of the text or text-array fields you want to use for
// phrase searches. When the terms in the search string appear in close proximity
// within a field, the field scores higher. You can specify a weight for each field
// to boost that score. The phraseSlop option controls how much the matches can
// deviate from the search string and still be boosted. To specify a field weight,
// append a caret ( ^ ) symbol and the weight to the field name. For example, to
// boost phrase matches in the title field over the abstract field, you could
// specify: "phraseFields":["title^3", "plot"] Valid values: The name of any text
// or text-array field and an optional numeric value greater than zero. Default:
// No fields. If you don't specify any fields with phraseFields , proximity
// scoring is disabled even if phraseSlop is specified. Valid for: dismax .
// - phraseSlop : An integer value that specifies how much matches can deviate
// from the search phrase and still be boosted according to the weights specified
// in the phraseFields option; for example, phraseSlop: 2 . You must also specify
// phraseFields to enable proximity scoring. Valid values: positive integers.
// Default: 0. Valid for: dismax .
// - explicitPhraseSlop : An integer value that specifies how much a match can
// deviate from the search phrase when the phrase is enclosed in double quotes in
// the search string. (Phrases that exceed this proximity distance are not
// considered a match.) For example, to specify a slop of three for dismax phrase
// queries, you would specify "explicitPhraseSlop":3 . Valid values: positive
// integers. Default: 0. Valid for: dismax .
// - tieBreaker : When a term in the search string is found in a document's
// field, a score is calculated for that field based on how common the word is in
// that field compared to other documents. If the term occurs in multiple fields
// within a document, by default only the highest scoring field contributes to the
// document's overall score. You can specify a tieBreaker value to enable the
// matches in lower-scoring fields to contribute to the document's score. That way,
// if two documents have the same max field score for a particular term, the score
// for the document that has matches in more fields will be higher. The formula for
// calculating the score with a tieBreaker is (max field score) + (tieBreaker) *
// (sum of the scores for the rest of the matching fields) . Set tieBreaker to 0
// to disregard all but the highest scoring field (pure max): "tieBreaker":0 .
// Set to 1 to sum the scores from all fields (pure sum): "tieBreaker":1 . Valid
// values: 0.0 to 1.0. Default: 0.0. Valid for: dismax .
QueryOptions *string
// Specifies which query parser to use to process the request. If queryParser is
// not specified, Amazon CloudSearch uses the simple query parser. Amazon
// CloudSearch supports four query parsers:
// - simple : perform simple searches of text and text-array fields. By default,
// the simple query parser searches all text and text-array fields. You can
// specify which fields to search by with the queryOptions parameter. If you
// prefix a search term with a plus sign (+) documents must contain the term to be
// considered a match. (This is the default, unless you configure the default
// operator with the queryOptions parameter.) You can use the - (NOT), | (OR),
// and * (wildcard) operators to exclude particular terms, find results that
// match any of the specified terms, or search for a prefix. To search for a phrase
// rather than individual terms, enclose the phrase in double quotes. For more
// information, see Searching for Text (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-text.html)
// in the Amazon CloudSearch Developer Guide.
// - structured : perform advanced searches by combining multiple expressions to
// define the search criteria. You can also search within particular fields, search
// for values and ranges of values, and use advanced options such as term boosting,
// matchall , and near . For more information, see Constructing Compound Queries (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/searching-compound-queries.html)
// in the Amazon CloudSearch Developer Guide.
// - lucene : search using the Apache Lucene query parser syntax. For more
// information, see Apache Lucene Query Parser Syntax (http://lucene.apache.org/core/4_6_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package_description)
// .
// - dismax : search using the simplified subset of the Apache Lucene query
// parser syntax defined by the DisMax query parser. For more information, see
// DisMax Query Parser Syntax (http://wiki.apache.org/solr/DisMaxQParserPlugin#Query_Syntax)
// .
QueryParser types.QueryParser
// Specifies the field and expression values to include in the response. Multiple
// fields or expressions are specified as a comma-separated list. By default, a
// search response includes all return enabled fields ( _all_fields ). To return
// only the document IDs for the matching documents, specify _no_fields . To
// retrieve the relevance score calculated for each document, specify _score .
Return *string
// Specifies the maximum number of search hits to include in the response.
Size int64
// Specifies the fields or custom expressions to use to sort the search results.
// Multiple fields or expressions are specified as a comma-separated list. You must
// specify the sort direction ( asc or desc ) for each field; for example, year
// desc,title asc . To use a field to sort results, the field must be sort-enabled
// in the domain configuration. Array type fields cannot be used for sorting. If no
// sort parameter is specified, results are sorted by their default relevance
// scores in descending order: _score desc . You can also sort by document ID ( _id
// asc ) and version ( _version desc ). For more information, see Sorting Results (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/sorting-results.html)
// in the Amazon CloudSearch Developer Guide.
Sort *string
// Specifies the offset of the first search hit you want to return. Note that the
// result set is zero-based; the first result is at index 0. You can specify either
// the start or cursor parameter in a request, they are mutually exclusive. For
// more information, see Paginating Results (http://docs.aws.amazon.com/cloudsearch/latest/developerguide/paginating-results.html)
// in the Amazon CloudSearch Developer Guide.
Start int64
// Specifies one or more fields for which to get statistics information. Each
// specified field must be facet-enabled in the domain configuration. The fields
// are specified in JSON using the form: {"FIELD-A":{},"FIELD-B":{}} There are
// currently no options supported for statistics.
Stats *string
noSmithyDocumentSerde
}
// The result of a Search request. Contains the documents that match the specified
// search criteria and any requested fields, highlights, and facet information.
type SearchOutput struct {
// The requested facet information.
Facets map[string]types.BucketInfo
// The documents that match the search criteria.
Hits *types.Hits
// The requested field statistics information.
Stats map[string]types.FieldStats
// The status information returned for the search request.
Status *types.SearchStatus
// Metadata pertaining to the operation's result.
ResultMetadata middleware.Metadata
noSmithyDocumentSerde
}
func (c *Client) addOperationSearchMiddlewares(stack *middleware.Stack, options Options) (err error) {
err = stack.Serialize.Add(&awsRestjson1_serializeOpSearch{}, middleware.After)
if err != nil {
return err
}
err = stack.Deserialize.Add(&awsRestjson1_deserializeOpSearch{}, middleware.After)
if err != nil {
return err
}
if err = addSetLoggerMiddleware(stack, options); err != nil {
return err
}
if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
return err
}
if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
return err
}
if err = addResolveEndpointMiddleware(stack, options); err != nil {
return err
}
if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
return err
}
if err = addRetryMiddlewares(stack, options); err != nil {
return err
}
if err = addHTTPSignerV4Middleware(stack, options); err != nil {
return err
}
if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
return err
}
if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
return err
}
if err = addClientUserAgent(stack, options); err != nil {
return err
}
if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
return err
}
if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
return err
}
if err = addOpSearchValidationMiddleware(stack); err != nil {
return err
}
if err = stack.Initialize.Add(newServiceMetadataMiddleware_opSearch(options.Region), middleware.Before); err != nil {
return err
}
if err = awsmiddleware.AddRecursionDetection(stack); err != nil {
return err
}
if err = addRequestIDRetrieverMiddleware(stack); err != nil {
return err
}
if err = addResponseErrorMiddleware(stack); err != nil {
return err
}
if err = addRequestResponseLogging(stack, options); err != nil {
return err
}
return nil
}
func newServiceMetadataMiddleware_opSearch(region string) *awsmiddleware.RegisterServiceMetadata {
return &awsmiddleware.RegisterServiceMetadata{
Region: region,
ServiceID: ServiceID,
SigningName: "cloudsearch",
OperationName: "Search",
}
}