<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="cloudsearch_v1.html">Cloud Search API</a> . <a href="cloudsearch_v1.settings.html">settings</a> . <a href="cloudsearch_v1.settings.searchapplications.html">searchapplications</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#create">create(body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a search application.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, debugOptions_enableDebugging=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a search application.</p>
<p class="toc_element">
  <code><a href="#get">get(name, debugOptions_enableDebugging=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the specified search application.</p>
<p class="toc_element">
  <code><a href="#list">list(pageSize=None, debugOptions_enableDebugging=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all search applications.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#reset">reset(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Resets a search application to default settings. This will return an empty</p>
<p class="toc_element">
  <code><a href="#update">update(name, body, x__xgafv=None)</a></code></p>
<p class="firstline">Updates a search application.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(body, x__xgafv=None)</code>
  <pre>Creates a search application.

Args:
  body: object, The request body. (required)
    The object takes the form of:

{ # SearchApplication
  "dataSourceRestrictions": [ # Retrictions applied to the configurations.
      # The maximum number of elements is 10.
    { # Restriction on Datasource.
      "filterOptions": [ # Filter options restricting the results. If multiple filters
          # are present, they are grouped by object type before joining.
          # Filters with the same object type are joined conjunctively, then
          # the resulting expressions are joined disjunctively.
          #
          # The maximum number of elements is 20.
          #
          # NOTE: Suggest API supports only few filters at the moment:
          #   "objecttype", "type" and "mimetype".
          # For now, schema specific filters cannot be used to filter suggestions.
        { # Filter options to be applied on query.
          "filter": { # A generic way of expressing filters in a query, which supports two # Generic filter to restrict the search, such as `lang:en`, `site:xyz`.
              # approaches: <br/><br/>
              # **1. Setting a ValueFilter.** The name must match an operator_name defined in
              # the schema for your data source.
              # <br/>
              # **2. Setting a CompositeFilter.** The filters are evaluated
              # using the logical operator. The top-level operators can only be either an AND
              # or a NOT. AND can appear only at the top-most level. OR can appear only under
              # a top-level AND.
            "compositeFilter": {
              "subFilters": [ # Sub filters.
                # Object with schema name: Filter
              ],
              "logicOperator": "A String", # The logic operator of the sub filter.
            },
            "valueFilter": {
              "operatorName": "A String", # The `operator_name` applied to the query, such as *price_greater_than*.
                  # The filter can work against both types of filters defined in the schema
                  # for your data source:
                  # <br/><br/>
                  # 1. `operator_name`, where the query filters results by the property
                  # that matches the value.
                  # <br/>
                  # 2. `greater_than_operator_name` or `less_than_operator_name` in your
                  # schema. The query filters the results for the property values that are
                  # greater than or less than  the supplied value in the query.
              "value": { # Definition of a single value with generic type. # The value to be compared with.
                "timestampValue": "A String",
                "doubleValue": 3.14,
                "dateValue": { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                  "month": 42, # Month of date. Must be from 1 to 12.
                  "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                  "year": 42, # Year of date. Must be from 1 to 9999.
                },
                "stringValue": "A String",
                "booleanValue": True or False,
                "integerValue": "A String",
              },
            },
          },
          "objectType": "A String", # If object_type is set, only objects of that type are returned. This should
              # correspond to the name of the object that was registered within the
              # definition of schema. The maximum length is 256 characters.
        },
      ],
      "source": { # Defines sources for the suggest/search APIs. # The source of restriction.
        "predefinedSource": "A String", # Predefined content source for Google Apps.
        "name": "A String", # Source name for content indexed by the
            # Indexing API.
      },
    },
  ],
  "operationIds": [ # IDs of the Long Running Operations (LROs) currently running for this
      # schema. Output only field.
    "A String",
  ],
  "displayName": "A String", # Display name of the Search Application.
      # The maximum length is 300 characters.
  "name": "A String", # Name of the Search Application.
      # <br />Format: searchapplications/{application_id}.
  "sourceConfig": [ # Configuration for a sources specified in data_source_restrictions.
    { # Configurations for a source while processing a
        # Search or
        # Suggest request.
      "scoringConfig": { # Set the scoring configuration. This allows modifying the ranking of results # The scoring configuration for the source.
          # for a source.
        "sourceImportance": "A String", # Importance of the source.
      },
      "crowdingConfig": { # Set search results crowding limits. Crowding is a situation in which # The crowding configuration for the source.
          # multiple results from the same source or host "crowd out" other results,
          # diminishing the quality of search for users. To foster better search quality
          # and source diversity in search results, you can set a condition to reduce
          # repetitive results by source.
        "numResults": 42, # Maximum number of results allowed from a source.
            # No limits will be set on results if this value is less than or equal to 0.
        "field": "A String", # Use a field to control results crowding. For example, if you want to
            # control overly similar results from Gmail topics, use `thread_id`.
            # For similar pages from Google Sites, you can use `webspace_id`.
            # When matching query results contain the same field value in
            # `GenericMetadata`, crowding limits are set on those records.
        "numSuggestions": 42, # Maximum number of suggestions allowed from a source.
            # No limits will be set on results if this value is less than or equal to 0.
        "source": True or False, # Control results by content source. This option limits the total number
            # of results from a given source and ignores field-based crowding control.
      },
      "source": { # Defines sources for the suggest/search APIs. # The source for which this configuration is to be used.
        "predefinedSource": "A String", # Predefined content source for Google Apps.
        "name": "A String", # Source name for content indexed by the
            # Indexing API.
      },
    },
  ],
  "scoringConfig": { # Scoring configurations for a source while processing a # Configuration for ranking results.
      # Search or
      # Suggest request.
    "disableFreshness": True or False, # Whether to use freshness as a ranking signal. By default, freshness is used
        # as a ranking signal. Note that this setting is not available in the Admin
        # UI.
    "disablePersonalization": True or False, # Whether to personalize the results. By default, personal signals will
        # be used to boost results.
  },
  "defaultSortOptions": { # The default options for sorting the search results
    "operatorName": "A String", # Name of the operator corresponding to the field to sort on.
        # The corresponding property must be marked as
        # sortable.
    "sortOrder": "A String", # Ascending is the default sort order
  },
  "defaultFacetOptions": [ # The default fields for returning facet results.
      # The sources specified here also have been included in
      # data_source_restrictions
      # above.
    { # Specifies operators to return facet results for. There will be one
        # FacetResult for every source_name/object_type/operator_name combination.
      "sourceName": "A String", # Source name to facet on. Format: datasources/{source_id}
          # If empty, all data sources will be used.
      "numFacetBuckets": 42, # Maximum number of facet buckets that should be returned for this facet.
          # Defaults to 10.
          # Maximum value is 100.
      "operatorName": "A String", # Name of the operator chosen for faceting. @see
          # cloudsearch.SchemaPropertyOptions
      "objectType": "A String", # If object_type is set, only those objects of that type will be used to
          # compute facets. If empty, then all objects will be used to compute facets.
    },
  ],
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, debugOptions_enableDebugging=None, x__xgafv=None)</code>
  <pre>Deletes a search application.

Args:
  name: string, The name of the search application to be deleted.
<br />Format: applications/{application_id}. (required)
  debugOptions_enableDebugging: boolean, If you are asked by Google to help with debugging, set this field.
Otherwise, ignore this field.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, debugOptions_enableDebugging=None, x__xgafv=None)</code>
  <pre>Gets the specified search application.

Args:
  name: string, Name of the search application.
<br />Format: applications/{application_id}. (required)
  debugOptions_enableDebugging: boolean, If you are asked by Google to help with debugging, set this field.
Otherwise, ignore this field.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # SearchApplication
    "dataSourceRestrictions": [ # Retrictions applied to the configurations.
        # The maximum number of elements is 10.
      { # Restriction on Datasource.
        "filterOptions": [ # Filter options restricting the results. If multiple filters
            # are present, they are grouped by object type before joining.
            # Filters with the same object type are joined conjunctively, then
            # the resulting expressions are joined disjunctively.
            #
            # The maximum number of elements is 20.
            #
            # NOTE: Suggest API supports only few filters at the moment:
            #   "objecttype", "type" and "mimetype".
            # For now, schema specific filters cannot be used to filter suggestions.
          { # Filter options to be applied on query.
            "filter": { # A generic way of expressing filters in a query, which supports two # Generic filter to restrict the search, such as `lang:en`, `site:xyz`.
                # approaches: <br/><br/>
                # **1. Setting a ValueFilter.** The name must match an operator_name defined in
                # the schema for your data source.
                # <br/>
                # **2. Setting a CompositeFilter.** The filters are evaluated
                # using the logical operator. The top-level operators can only be either an AND
                # or a NOT. AND can appear only at the top-most level. OR can appear only under
                # a top-level AND.
              "compositeFilter": {
                "subFilters": [ # Sub filters.
                  # Object with schema name: Filter
                ],
                "logicOperator": "A String", # The logic operator of the sub filter.
              },
              "valueFilter": {
                "operatorName": "A String", # The `operator_name` applied to the query, such as *price_greater_than*.
                    # The filter can work against both types of filters defined in the schema
                    # for your data source:
                    # <br/><br/>
                    # 1. `operator_name`, where the query filters results by the property
                    # that matches the value.
                    # <br/>
                    # 2. `greater_than_operator_name` or `less_than_operator_name` in your
                    # schema. The query filters the results for the property values that are
                    # greater than or less than  the supplied value in the query.
                "value": { # Definition of a single value with generic type. # The value to be compared with.
                  "timestampValue": "A String",
                  "doubleValue": 3.14,
                  "dateValue": { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                    "month": 42, # Month of date. Must be from 1 to 12.
                    "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                    "year": 42, # Year of date. Must be from 1 to 9999.
                  },
                  "stringValue": "A String",
                  "booleanValue": True or False,
                  "integerValue": "A String",
                },
              },
            },
            "objectType": "A String", # If object_type is set, only objects of that type are returned. This should
                # correspond to the name of the object that was registered within the
                # definition of schema. The maximum length is 256 characters.
          },
        ],
        "source": { # Defines sources for the suggest/search APIs. # The source of restriction.
          "predefinedSource": "A String", # Predefined content source for Google Apps.
          "name": "A String", # Source name for content indexed by the
              # Indexing API.
        },
      },
    ],
    "operationIds": [ # IDs of the Long Running Operations (LROs) currently running for this
        # schema. Output only field.
      "A String",
    ],
    "displayName": "A String", # Display name of the Search Application.
        # The maximum length is 300 characters.
    "name": "A String", # Name of the Search Application.
        # <br />Format: searchapplications/{application_id}.
    "sourceConfig": [ # Configuration for a sources specified in data_source_restrictions.
      { # Configurations for a source while processing a
          # Search or
          # Suggest request.
        "scoringConfig": { # Set the scoring configuration. This allows modifying the ranking of results # The scoring configuration for the source.
            # for a source.
          "sourceImportance": "A String", # Importance of the source.
        },
        "crowdingConfig": { # Set search results crowding limits. Crowding is a situation in which # The crowding configuration for the source.
            # multiple results from the same source or host "crowd out" other results,
            # diminishing the quality of search for users. To foster better search quality
            # and source diversity in search results, you can set a condition to reduce
            # repetitive results by source.
          "numResults": 42, # Maximum number of results allowed from a source.
              # No limits will be set on results if this value is less than or equal to 0.
          "field": "A String", # Use a field to control results crowding. For example, if you want to
              # control overly similar results from Gmail topics, use `thread_id`.
              # For similar pages from Google Sites, you can use `webspace_id`.
              # When matching query results contain the same field value in
              # `GenericMetadata`, crowding limits are set on those records.
          "numSuggestions": 42, # Maximum number of suggestions allowed from a source.
              # No limits will be set on results if this value is less than or equal to 0.
          "source": True or False, # Control results by content source. This option limits the total number
              # of results from a given source and ignores field-based crowding control.
        },
        "source": { # Defines sources for the suggest/search APIs. # The source for which this configuration is to be used.
          "predefinedSource": "A String", # Predefined content source for Google Apps.
          "name": "A String", # Source name for content indexed by the
              # Indexing API.
        },
      },
    ],
    "scoringConfig": { # Scoring configurations for a source while processing a # Configuration for ranking results.
        # Search or
        # Suggest request.
      "disableFreshness": True or False, # Whether to use freshness as a ranking signal. By default, freshness is used
          # as a ranking signal. Note that this setting is not available in the Admin
          # UI.
      "disablePersonalization": True or False, # Whether to personalize the results. By default, personal signals will
          # be used to boost results.
    },
    "defaultSortOptions": { # The default options for sorting the search results
      "operatorName": "A String", # Name of the operator corresponding to the field to sort on.
          # The corresponding property must be marked as
          # sortable.
      "sortOrder": "A String", # Ascending is the default sort order
    },
    "defaultFacetOptions": [ # The default fields for returning facet results.
        # The sources specified here also have been included in
        # data_source_restrictions
        # above.
      { # Specifies operators to return facet results for. There will be one
          # FacetResult for every source_name/object_type/operator_name combination.
        "sourceName": "A String", # Source name to facet on. Format: datasources/{source_id}
            # If empty, all data sources will be used.
        "numFacetBuckets": 42, # Maximum number of facet buckets that should be returned for this facet.
            # Defaults to 10.
            # Maximum value is 100.
        "operatorName": "A String", # Name of the operator chosen for faceting. @see
            # cloudsearch.SchemaPropertyOptions
        "objectType": "A String", # If object_type is set, only those objects of that type will be used to
            # compute facets. If empty, then all objects will be used to compute facets.
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(pageSize=None, debugOptions_enableDebugging=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all search applications.

Args:
  pageSize: integer, The maximum number of items to return.
  debugOptions_enableDebugging: boolean, If you are asked by Google to help with debugging, set this field.
Otherwise, ignore this field.
  pageToken: string, The next_page_token value returned from a previous List request, if any.
<br/> The default value is 10
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
    "nextPageToken": "A String", # Token to retrieve the next page of results, or empty if there are no
        # more results in the list.
    "searchApplications": [
      { # SearchApplication
        "dataSourceRestrictions": [ # Retrictions applied to the configurations.
            # The maximum number of elements is 10.
          { # Restriction on Datasource.
            "filterOptions": [ # Filter options restricting the results. If multiple filters
                # are present, they are grouped by object type before joining.
                # Filters with the same object type are joined conjunctively, then
                # the resulting expressions are joined disjunctively.
                #
                # The maximum number of elements is 20.
                #
                # NOTE: Suggest API supports only few filters at the moment:
                #   "objecttype", "type" and "mimetype".
                # For now, schema specific filters cannot be used to filter suggestions.
              { # Filter options to be applied on query.
                "filter": { # A generic way of expressing filters in a query, which supports two # Generic filter to restrict the search, such as `lang:en`, `site:xyz`.
                    # approaches: <br/><br/>
                    # **1. Setting a ValueFilter.** The name must match an operator_name defined in
                    # the schema for your data source.
                    # <br/>
                    # **2. Setting a CompositeFilter.** The filters are evaluated
                    # using the logical operator. The top-level operators can only be either an AND
                    # or a NOT. AND can appear only at the top-most level. OR can appear only under
                    # a top-level AND.
                  "compositeFilter": {
                    "subFilters": [ # Sub filters.
                      # Object with schema name: Filter
                    ],
                    "logicOperator": "A String", # The logic operator of the sub filter.
                  },
                  "valueFilter": {
                    "operatorName": "A String", # The `operator_name` applied to the query, such as *price_greater_than*.
                        # The filter can work against both types of filters defined in the schema
                        # for your data source:
                        # <br/><br/>
                        # 1. `operator_name`, where the query filters results by the property
                        # that matches the value.
                        # <br/>
                        # 2. `greater_than_operator_name` or `less_than_operator_name` in your
                        # schema. The query filters the results for the property values that are
                        # greater than or less than  the supplied value in the query.
                    "value": { # Definition of a single value with generic type. # The value to be compared with.
                      "timestampValue": "A String",
                      "doubleValue": 3.14,
                      "dateValue": { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                        "month": 42, # Month of date. Must be from 1 to 12.
                        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                        "year": 42, # Year of date. Must be from 1 to 9999.
                      },
                      "stringValue": "A String",
                      "booleanValue": True or False,
                      "integerValue": "A String",
                    },
                  },
                },
                "objectType": "A String", # If object_type is set, only objects of that type are returned. This should
                    # correspond to the name of the object that was registered within the
                    # definition of schema. The maximum length is 256 characters.
              },
            ],
            "source": { # Defines sources for the suggest/search APIs. # The source of restriction.
              "predefinedSource": "A String", # Predefined content source for Google Apps.
              "name": "A String", # Source name for content indexed by the
                  # Indexing API.
            },
          },
        ],
        "operationIds": [ # IDs of the Long Running Operations (LROs) currently running for this
            # schema. Output only field.
          "A String",
        ],
        "displayName": "A String", # Display name of the Search Application.
            # The maximum length is 300 characters.
        "name": "A String", # Name of the Search Application.
            # <br />Format: searchapplications/{application_id}.
        "sourceConfig": [ # Configuration for a sources specified in data_source_restrictions.
          { # Configurations for a source while processing a
              # Search or
              # Suggest request.
            "scoringConfig": { # Set the scoring configuration. This allows modifying the ranking of results # The scoring configuration for the source.
                # for a source.
              "sourceImportance": "A String", # Importance of the source.
            },
            "crowdingConfig": { # Set search results crowding limits. Crowding is a situation in which # The crowding configuration for the source.
                # multiple results from the same source or host "crowd out" other results,
                # diminishing the quality of search for users. To foster better search quality
                # and source diversity in search results, you can set a condition to reduce
                # repetitive results by source.
              "numResults": 42, # Maximum number of results allowed from a source.
                  # No limits will be set on results if this value is less than or equal to 0.
              "field": "A String", # Use a field to control results crowding. For example, if you want to
                  # control overly similar results from Gmail topics, use `thread_id`.
                  # For similar pages from Google Sites, you can use `webspace_id`.
                  # When matching query results contain the same field value in
                  # `GenericMetadata`, crowding limits are set on those records.
              "numSuggestions": 42, # Maximum number of suggestions allowed from a source.
                  # No limits will be set on results if this value is less than or equal to 0.
              "source": True or False, # Control results by content source. This option limits the total number
                  # of results from a given source and ignores field-based crowding control.
            },
            "source": { # Defines sources for the suggest/search APIs. # The source for which this configuration is to be used.
              "predefinedSource": "A String", # Predefined content source for Google Apps.
              "name": "A String", # Source name for content indexed by the
                  # Indexing API.
            },
          },
        ],
        "scoringConfig": { # Scoring configurations for a source while processing a # Configuration for ranking results.
            # Search or
            # Suggest request.
          "disableFreshness": True or False, # Whether to use freshness as a ranking signal. By default, freshness is used
              # as a ranking signal. Note that this setting is not available in the Admin
              # UI.
          "disablePersonalization": True or False, # Whether to personalize the results. By default, personal signals will
              # be used to boost results.
        },
        "defaultSortOptions": { # The default options for sorting the search results
          "operatorName": "A String", # Name of the operator corresponding to the field to sort on.
              # The corresponding property must be marked as
              # sortable.
          "sortOrder": "A String", # Ascending is the default sort order
        },
        "defaultFacetOptions": [ # The default fields for returning facet results.
            # The sources specified here also have been included in
            # data_source_restrictions
            # above.
          { # Specifies operators to return facet results for. There will be one
              # FacetResult for every source_name/object_type/operator_name combination.
            "sourceName": "A String", # Source name to facet on. Format: datasources/{source_id}
                # If empty, all data sources will be used.
            "numFacetBuckets": 42, # Maximum number of facet buckets that should be returned for this facet.
                # Defaults to 10.
                # Maximum value is 100.
            "operatorName": "A String", # Name of the operator chosen for faceting. @see
                # cloudsearch.SchemaPropertyOptions
            "objectType": "A String", # If object_type is set, only those objects of that type will be used to
                # compute facets. If empty, then all objects will be used to compute facets.
          },
        ],
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="reset">reset(name, body, x__xgafv=None)</code>
  <pre>Resets a search application to default settings. This will return an empty
response.

Args:
  name: string, The name of the search application to be reset.
<br />Format: applications/{application_id}. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "debugOptions": { # Shared request debug options for all cloudsearch RPC methods. # Common debug options.
      "enableDebugging": True or False, # If you are asked by Google to help with debugging, set this field.
          # Otherwise, ignore this field.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(name, body, x__xgafv=None)</code>
  <pre>Updates a search application.

Args:
  name: string, Name of the Search Application.
<br />Format: searchapplications/{application_id}. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # SearchApplication
  "dataSourceRestrictions": [ # Retrictions applied to the configurations.
      # The maximum number of elements is 10.
    { # Restriction on Datasource.
      "filterOptions": [ # Filter options restricting the results. If multiple filters
          # are present, they are grouped by object type before joining.
          # Filters with the same object type are joined conjunctively, then
          # the resulting expressions are joined disjunctively.
          #
          # The maximum number of elements is 20.
          #
          # NOTE: Suggest API supports only few filters at the moment:
          #   "objecttype", "type" and "mimetype".
          # For now, schema specific filters cannot be used to filter suggestions.
        { # Filter options to be applied on query.
          "filter": { # A generic way of expressing filters in a query, which supports two # Generic filter to restrict the search, such as `lang:en`, `site:xyz`.
              # approaches: <br/><br/>
              # **1. Setting a ValueFilter.** The name must match an operator_name defined in
              # the schema for your data source.
              # <br/>
              # **2. Setting a CompositeFilter.** The filters are evaluated
              # using the logical operator. The top-level operators can only be either an AND
              # or a NOT. AND can appear only at the top-most level. OR can appear only under
              # a top-level AND.
            "compositeFilter": {
              "subFilters": [ # Sub filters.
                # Object with schema name: Filter
              ],
              "logicOperator": "A String", # The logic operator of the sub filter.
            },
            "valueFilter": {
              "operatorName": "A String", # The `operator_name` applied to the query, such as *price_greater_than*.
                  # The filter can work against both types of filters defined in the schema
                  # for your data source:
                  # <br/><br/>
                  # 1. `operator_name`, where the query filters results by the property
                  # that matches the value.
                  # <br/>
                  # 2. `greater_than_operator_name` or `less_than_operator_name` in your
                  # schema. The query filters the results for the property values that are
                  # greater than or less than  the supplied value in the query.
              "value": { # Definition of a single value with generic type. # The value to be compared with.
                "timestampValue": "A String",
                "doubleValue": 3.14,
                "dateValue": { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                  "month": 42, # Month of date. Must be from 1 to 12.
                  "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                  "year": 42, # Year of date. Must be from 1 to 9999.
                },
                "stringValue": "A String",
                "booleanValue": True or False,
                "integerValue": "A String",
              },
            },
          },
          "objectType": "A String", # If object_type is set, only objects of that type are returned. This should
              # correspond to the name of the object that was registered within the
              # definition of schema. The maximum length is 256 characters.
        },
      ],
      "source": { # Defines sources for the suggest/search APIs. # The source of restriction.
        "predefinedSource": "A String", # Predefined content source for Google Apps.
        "name": "A String", # Source name for content indexed by the
            # Indexing API.
      },
    },
  ],
  "operationIds": [ # IDs of the Long Running Operations (LROs) currently running for this
      # schema. Output only field.
    "A String",
  ],
  "displayName": "A String", # Display name of the Search Application.
      # The maximum length is 300 characters.
  "name": "A String", # Name of the Search Application.
      # <br />Format: searchapplications/{application_id}.
  "sourceConfig": [ # Configuration for a sources specified in data_source_restrictions.
    { # Configurations for a source while processing a
        # Search or
        # Suggest request.
      "scoringConfig": { # Set the scoring configuration. This allows modifying the ranking of results # The scoring configuration for the source.
          # for a source.
        "sourceImportance": "A String", # Importance of the source.
      },
      "crowdingConfig": { # Set search results crowding limits. Crowding is a situation in which # The crowding configuration for the source.
          # multiple results from the same source or host "crowd out" other results,
          # diminishing the quality of search for users. To foster better search quality
          # and source diversity in search results, you can set a condition to reduce
          # repetitive results by source.
        "numResults": 42, # Maximum number of results allowed from a source.
            # No limits will be set on results if this value is less than or equal to 0.
        "field": "A String", # Use a field to control results crowding. For example, if you want to
            # control overly similar results from Gmail topics, use `thread_id`.
            # For similar pages from Google Sites, you can use `webspace_id`.
            # When matching query results contain the same field value in
            # `GenericMetadata`, crowding limits are set on those records.
        "numSuggestions": 42, # Maximum number of suggestions allowed from a source.
            # No limits will be set on results if this value is less than or equal to 0.
        "source": True or False, # Control results by content source. This option limits the total number
            # of results from a given source and ignores field-based crowding control.
      },
      "source": { # Defines sources for the suggest/search APIs. # The source for which this configuration is to be used.
        "predefinedSource": "A String", # Predefined content source for Google Apps.
        "name": "A String", # Source name for content indexed by the
            # Indexing API.
      },
    },
  ],
  "scoringConfig": { # Scoring configurations for a source while processing a # Configuration for ranking results.
      # Search or
      # Suggest request.
    "disableFreshness": True or False, # Whether to use freshness as a ranking signal. By default, freshness is used
        # as a ranking signal. Note that this setting is not available in the Admin
        # UI.
    "disablePersonalization": True or False, # Whether to personalize the results. By default, personal signals will
        # be used to boost results.
  },
  "defaultSortOptions": { # The default options for sorting the search results
    "operatorName": "A String", # Name of the operator corresponding to the field to sort on.
        # The corresponding property must be marked as
        # sortable.
    "sortOrder": "A String", # Ascending is the default sort order
  },
  "defaultFacetOptions": [ # The default fields for returning facet results.
      # The sources specified here also have been included in
      # data_source_restrictions
      # above.
    { # Specifies operators to return facet results for. There will be one
        # FacetResult for every source_name/object_type/operator_name combination.
      "sourceName": "A String", # Source name to facet on. Format: datasources/{source_id}
          # If empty, all data sources will be used.
      "numFacetBuckets": 42, # Maximum number of facet buckets that should be returned for this facet.
          # Defaults to 10.
          # Maximum value is 100.
      "operatorName": "A String", # Name of the operator chosen for faceting. @see
          # cloudsearch.SchemaPropertyOptions
      "objectType": "A String", # If object_type is set, only those objects of that type will be used to
          # compute facets. If empty, then all objects will be used to compute facets.
    },
  ],
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This resource represents a long-running operation that is the result of a
      # network API call.
    "metadata": { # Service-specific metadata associated with the operation.  It typically
        # contains progress information and common metadata such as create time.
        # Some services might not provide such metadata.  Any method that returns a
        # long-running operation should document the metadata type, if any.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "error": { # The `Status` type defines a logical error model that is suitable for # The error result of the operation in case of failure or cancellation.
        # different programming environments, including REST APIs and RPC APIs. It is
        # used by [gRPC](https://github.com/grpc). Each `Status` message contains
        # three pieces of data: error code, error message, and error details.
        #
        # You can find out more about this error model and how to work with it in the
        # [API Design Guide](https://cloud.google.com/apis/design/errors).
      "message": "A String", # A developer-facing error message, which should be in English. Any
          # user-facing error message should be localized and sent in the
          # google.rpc.Status.details field, or localized by the client.
      "code": 42, # The status code, which should be an enum value of google.rpc.Code.
      "details": [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          "a_key": "", # Properties of the object. Contains field @type with type URL.
        },
      ],
    },
    "done": True or False, # If the value is `false`, it means the operation is still in progress.
        # If `true`, the operation is completed, and either `error` or `response` is
        # available.
    "response": { # The normal response of the operation in case of success.  If the original
        # method returns no data on success, such as `Delete`, the response is
        # `google.protobuf.Empty`.  If the original method is standard
        # `Get`/`Create`/`Update`, the response should be the resource.  For other
        # methods, the response should have the type `XxxResponse`, where `Xxx`
        # is the original method name.  For example, if the original method name
        # is `TakeSnapshot()`, the inferred response type is
        # `TakeSnapshotResponse`.
      "a_key": "", # Properties of the object. Contains field @type with type URL.
    },
    "name": "A String", # The server-assigned name, which is only unique within the same service that
        # originally returns it. If you use the default HTTP mapping, the
        # `name` should be a resource name ending with `operations/{unique_id}`.
  }</pre>
</div>

</body></html>