<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.indexing.html">indexing</a> . <a href="cloudsearch_v1.indexing.datasources.html">datasources</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="cloudsearch_v1.indexing.datasources.items.html">items()</a></code>
</p>
<p class="firstline">Returns the items Resource.</p>

<p class="toc_element">
  <code><a href="#deleteSchema">deleteSchema(name, debugOptions_enableDebugging=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the schema of a data source.</p>
<p class="toc_element">
  <code><a href="#getSchema">getSchema(name, debugOptions_enableDebugging=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the schema of a data source.</p>
<p class="toc_element">
  <code><a href="#updateSchema">updateSchema(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the schema of a data source. This method does not perform</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="deleteSchema">deleteSchema(name, debugOptions_enableDebugging=None, x__xgafv=None)</code>
  <pre>Deletes the schema of a data source.

**Note:** This API requires an admin or service account to execute.

Args:
  name: string, Name of the data source to delete Schema.  Format:
datasources/{source_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.
    &quot;response&quot;: { # 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`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;metadata&quot;: { # 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.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # 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).
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # 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.
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
    &quot;name&quot;: &quot;A String&quot;, # 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}`.
    &quot;done&quot;: 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.
  }</pre>
</div>

<div class="method">
    <code class="details" id="getSchema">getSchema(name, debugOptions_enableDebugging=None, x__xgafv=None)</code>
  <pre>Gets the schema of a data source.

**Note:** This API requires an admin or service account to execute.

Args:
  name: string, Name of the data source to get Schema.  Format:
datasources/{source_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:

    { # The schema definition for a data source.
    &quot;operationIds&quot;: [ # IDs of the Long Running Operations (LROs) currently running for this
        # schema. After modifying the schema, wait for operations to complete
        # before indexing additional content.
      &quot;A String&quot;,
    ],
    &quot;objectDefinitions&quot;: [ # The list of top-level objects for the data source.
        # The maximum number of elements is 10.
      { # The definition for an object within a data source.
        &quot;propertyDefinitions&quot;: [ # The property definitions for the object.
            # The maximum number of elements is 1000.
          { # The definition of a property within an object.
            &quot;isRepeatable&quot;: True or False, # Indicates that multiple values are allowed for the property. For example, a
                # document only has one description but can have multiple comments. Cannot be
                # true for properties whose type is a boolean.
                # If set to false, properties that contain more than one value cause the
                # indexing request for that item to be rejected.
            &quot;htmlPropertyOptions&quot;: { # Options for html properties.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for html properties. This is optional. # If set, describes how the property should be used as a search operator.
                  # Search operators let users restrict the query to specific fields relevant
                  # to the type of item being searched.
                &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # html property. For example, if operatorName is *subject* and the
                    # property&#x27;s name is *subjectLine*, then queries like
                    # *subject:&amp;lt;value&amp;gt;* show results only where the value of the
                    # property named *subjectLine* matches *&amp;lt;value&amp;gt;*. By contrast, a
                    # search that uses the same *&amp;lt;value&amp;gt;* without an operator return
                    # all items where *&amp;lt;value&amp;gt;* matches the value of any
                    # html properties or text within the content field for the item.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
              },
              &quot;retrievalImportance&quot;: { # Indicates the search quality importance of the tokens within the
                  # field when used for retrieval. Can only be set to DEFAULT or NONE.
                &quot;importance&quot;: &quot;A String&quot;, # Indicates the ranking importance given to property when it is matched
                    # during retrieval. Once set, the token importance of a property cannot be
                    # changed.
              },
            },
            &quot;isReturnable&quot;: True or False, # Indicates that the property identifies data that should be returned in
                # search results via the Query API. If set to *true*, indicates that Query
                # API users can use matching property fields in results. However, storing
                # fields requires more space allocation and uses more bandwidth for search
                # queries, which impacts performance over large datasets. Set to *true* here
                # only if the field is needed for search results. Cannot be true for
                # properties whose type is an object.
            &quot;textPropertyOptions&quot;: { # Options for text properties.
              &quot;retrievalImportance&quot;: { # Indicates the search quality importance of the tokens within the
                  # field when used for retrieval.
                &quot;importance&quot;: &quot;A String&quot;, # Indicates the ranking importance given to property when it is matched
                    # during retrieval. Once set, the token importance of a property cannot be
                    # changed.
              },
              &quot;operatorOptions&quot;: { # Used to provide a search operator for text properties. This is optional. # If set, describes how the property should be used as a search operator.
                  # Search operators let users restrict the query to specific fields relevant
                  # to the type of item being searched.
                &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # text property. For example, if operatorName is *subject* and the
                    # property&#x27;s name is *subjectLine*, then queries like
                    # *subject:&amp;lt;value&amp;gt;* show results only where the value of the
                    # property named *subjectLine* matches *&amp;lt;value&amp;gt;*. By contrast, a
                    # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                    # all items where *&amp;lt;value&amp;gt;* matches the value of any
                    # text properties or text within the content field for the item.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
                &quot;exactMatchWithOperator&quot;: True or False, # If true, the text value is tokenized as one atomic value in
                    # operator searches and facet matches. For example, if the operator name is
                    # &quot;genre&quot; and the value is &quot;science-fiction&quot; the query restrictions
                    # &quot;genre:science&quot; and &quot;genre:fiction&quot; doesn&#x27;t match the item;
                    # &quot;genre:science-fiction&quot; does. Value matching is case-sensitive
                    # and does not remove special characters.
                    # If false, the text is tokenized. For example, if the value is
                    # &quot;science-fiction&quot; the queries &quot;genre:science&quot; and &quot;genre:fiction&quot;
                    # matches the item.
              },
            },
            &quot;displayOptions&quot;: { # The display options for a property. # Options that determine how the property is displayed in the Cloud Search
                # results page if it is specified to be displayed in the object&#x27;s
                # display options
                # .
              &quot;displayLabel&quot;: &quot;A String&quot;, # The user friendly label for the property that is used if the property
                  # is specified to be displayed in ObjectDisplayOptions. If provided, the
                  # display label is shown in front of the property values when the property is
                  # part of the object display options. For example, if the property value is
                  # &#x27;1&#x27;, the value by itself may not be useful context for the user. If the
                  # display name given was &#x27;priority&#x27;, then the user sees &#x27;priority : 1&#x27; in
                  # the search results which provides clear context to search users. This is
                  # OPTIONAL; if not given, only the property values are displayed.
                  # The maximum length is 64 characters.
            },
            &quot;timestampPropertyOptions&quot;: { # Options for timestamp properties.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for timestamp properties. This is # If set, describes how the timestamp should be used as a search operator.
                  # optional. Search operators let users restrict the query to specific fields
                  # relevant to the type of item being searched.
                &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # timestamp property. For example, if operatorName is *closedon* and the
                    # property&#x27;s name is *closeDate*, then queries like
                    # *closedon:&amp;lt;value&amp;gt;* show results only where the value of the
                    # property named *closeDate* matches *&amp;lt;value&amp;gt;*. By contrast, a
                    # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                    # all items where *&amp;lt;value&amp;gt;* matches the value of any String
                    # properties or text within the content field for the item. The operator
                    # name can only contain lowercase letters (a-z). The maximum length is 32
                    # characters.
                &quot;lessThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # timestamp property using the less-than operator. For example, if
                    # lessThanOperatorName is *closedbefore* and the property&#x27;s name is
                    # *closeDate*, then queries like *closedbefore:&amp;lt;value&amp;gt;*
                    # show results only where the value of the property named *closeDate* is
                    # earlier than *&amp;lt;value&amp;gt;*.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
                &quot;greaterThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # timestamp property using the greater-than operator. For example, if
                    # greaterThanOperatorName is *closedafter* and the property&#x27;s name is
                    # *closeDate*, then queries like *closedafter:&amp;lt;value&amp;gt;*
                    # show results only where the value of the property named *closeDate* is
                    # later than *&amp;lt;value&amp;gt;*.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
              },
            },
            &quot;isSuggestable&quot;: True or False, # Indicates that the property can be used for generating query suggestions.
            &quot;objectPropertyOptions&quot;: { # Options for object properties.
              &quot;subobjectProperties&quot;: [ # The properties of the sub-object. These properties represent a nested
                  # object. For example, if this property represents a postal address, the
                  # subobjectProperties might be named *street*, *city*, and *state*.
                  # The maximum number of elements is 1000.
                # Object with schema name: PropertyDefinition
              ],
            },
            &quot;booleanPropertyOptions&quot;: { # Options for boolean properties.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for boolean properties. This is # If set, describes how the boolean should be used as a search operator.
                  # optional. Search operators let users restrict the query to specific fields
                  # relevant to the type of item being searched.
                &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # boolean property. For example, if operatorName is *closed* and the
                    # property&#x27;s name is *isClosed*, then queries like
                    # *closed:&amp;lt;value&amp;gt;* show results only where the value of the
                    # property named *isClosed* matches *&amp;lt;value&amp;gt;*. By contrast, a
                    # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                    # all items where *&amp;lt;value&amp;gt;* matches the value of any
                    # String properties or text within the content field for the item.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
              },
            },
            &quot;integerPropertyOptions&quot;: { # Options for integer properties.
              &quot;orderedRanking&quot;: &quot;A String&quot;, # Used to specify the ordered ranking for the integer. Can only be used if
                  # isRepeatable
                  # is false.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for integer properties. This is # If set, describes how the integer should be used as a search operator.
                  # optional. Search operators let users restrict the query to specific fields
                  # relevant to the type of item being searched.
                &quot;greaterThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # integer property using the greater-than operator. For example, if
                    # greaterThanOperatorName is *priorityabove* and the property&#x27;s name is
                    # *priorityVal*, then queries like *priorityabove:&amp;lt;value&amp;gt;*
                    # show results only where the value of the property named *priorityVal* is
                    # greater than *&amp;lt;value&amp;gt;*.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
                &quot;lessThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # integer property using the less-than operator. For example, if
                    # lessThanOperatorName is *prioritybelow* and the property&#x27;s name is
                    # *priorityVal*, then queries like *prioritybelow:&amp;lt;value&amp;gt;*
                    # show results only where the value of the property named *priorityVal* is
                    # less than *&amp;lt;value&amp;gt;*.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
                &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # integer property. For example, if operatorName is *priority* and the
                    # property&#x27;s name is *priorityVal*, then queries like
                    # *priority:&amp;lt;value&amp;gt;* show results only where the value of the
                    # property named *priorityVal* matches *&amp;lt;value&amp;gt;*. By contrast, a
                    # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                    # all items where *&amp;lt;value&amp;gt;* matches the value of any String
                    # properties or text within the content field for the item.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
              },
              &quot;minimumValue&quot;: &quot;A String&quot;, # The minimum value of the property. The minimum and maximum values for the
                  # property are used to rank results according to the
                  # ordered ranking.
                  # Indexing requests with values less than the minimum are accepted and
                  # ranked with the same weight as items indexed with the minimum value.
              &quot;maximumValue&quot;: &quot;A String&quot;, # The maximum value of the property. The minimum and maximum values for the
                  # property are used to rank results according to the
                  # ordered ranking.
                  # Indexing requests with values greater than the maximum are accepted and
                  # ranked with the same weight as items indexed with the maximum value.
            },
            &quot;name&quot;: &quot;A String&quot;, # The name of the property. Item indexing requests sent to the Indexing API
                # should set the property name
                # equal to this value. For example, if name is *subject_line*, then indexing
                # requests for document items with subject fields should set the
                # name for that field equal to
                # *subject_line*. Use the name as the identifier for the object property.
                # Once registered as a property for an object, you cannot re-use this name
                # for another property within that object.
                # The name must start with a letter and can only contain letters (A-Z, a-z)
                # or numbers (0-9).
                # The maximum length is 256 characters.
            &quot;isFacetable&quot;: True or False, # Indicates that the property can be used for generating facets. Cannot be
                # true for properties whose type is object. IsReturnable must be true to set
                # this option.
                # Only supported for Boolean, Enum, and Text properties.
            &quot;doublePropertyOptions&quot;: { # Options for double properties.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for double properties. This is # If set, describes how the double should be used as a search operator.
                  # optional. Search operators let users restrict the query to specific fields
                  # relevant to the type of item being searched.
                &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to use the
                    # double property in sorting or as a facet.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
              },
            },
            &quot;isWildcardSearchable&quot;: True or False, # Indicates that users can perform wildcard search for this
                # property. Only supported for Text properties. IsReturnable must be true to
                # set this option. In a given datasource maximum of 5 properties can be
                # marked as is_wildcard_searchable.
            &quot;enumPropertyOptions&quot;: { # Options for enum properties, which allow you to define a restricted set of
                # strings to match user queries, set rankings for those string values, and
                # define an operator name to be paired with those strings so that users can
                # narrow results to only items with a specific value. For example, for items in
                # a request tracking system with priority information, you could define *p0* as
                # an allowable enum value and tie this enum to the operator name *priority* so
                # that search users could add *priority:p0* to their query to restrict the set
                # of results to only those items indexed with the value *p0*.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for enum properties. This is # If set, describes how the enum should be used as a search operator.
                  # optional. Search operators let users restrict the query to specific fields
                  # relevant to the type of item being searched. For example, if you provide no
                  # operator for a *priority* enum property with possible values *p0* and *p1*,
                  # a query that contains the term *p0* returns items that have *p0* as the
                  # value of the *priority* property, as well as any items that contain the
                  # string *p0* in other fields. If you provide an operator name for the enum,
                  # such as *priority*, then search users can use that operator to refine
                  # results to only items that have *p0* as this property&#x27;s value, with the
                  # query *priority:p0*.
                &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # enum property. For example, if operatorName is *priority* and the
                    # property&#x27;s name is *priorityVal*, then queries like
                    # *priority:&amp;lt;value&amp;gt;* show results only where the value of the
                    # property named *priorityVal* matches *&amp;lt;value&amp;gt;*. By contrast, a
                    # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                    # all items where *&amp;lt;value&amp;gt;* matches the value of any String
                    # properties or text within the content field for the item.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
              },
              &quot;orderedRanking&quot;: &quot;A String&quot;, # Used to specify the ordered ranking for the enumeration that determines how
                  # the integer values provided in the possible EnumValuePairs are used to rank
                  # results. If specified, integer values must be provided for all possible
                  # EnumValuePair values given for this property. Can only be used if
                  # isRepeatable
                  # is false.
              &quot;possibleValues&quot;: [ # The list of possible values for the enumeration property. All
                  # EnumValuePairs must provide a string value. If you specify an integer value
                  # for one EnumValuePair, then all possible EnumValuePairs must provide an
                  # integer value. Both the string value and integer value must be unique over
                  # all possible values. Once set, possible values cannot be removed or
                  # modified. If you supply an ordered ranking and think you might insert
                  # additional enum values in the future, leave gaps in the initial integer
                  # values to allow adding a value in between previously registered values.
                  # The maximum number of elements is 100.
                { # The enumeration value pair defines two things: a required string value and
                    # an optional integer value. The string value defines the necessary query
                    # term required to retrieve that item, such as *p0* for a priority item.
                    # The integer value determines the ranking of that string value relative
                    # to other enumerated values for the same property. For example, you might
                    # associate *p0* with *0* and define another enum pair such as *p1* and *1*.
                    # You must use the integer value in combination with
                    # ordered
                    # ranking to
                    # set the ranking of a given value relative to other enumerated values for
                    # the same property name. Here, a ranking order of DESCENDING for *priority*
                    # properties results in a ranking boost for items indexed with a value of
                    # *p0* compared to items indexed with a value of *p1*. Without a specified
                    # ranking order, the integer value has no effect on item ranking.
                  &quot;integerValue&quot;: 42, # The integer value of the EnumValuePair which must be non-negative.
                      # Optional.
                  &quot;stringValue&quot;: &quot;A String&quot;, # The string value of the EnumValuePair.
                      # The maximum length is 32 characters.
                },
              ],
            },
            &quot;isSortable&quot;: True or False, # Indicates that the property can be used for sorting. Cannot be true for
                # properties that are repeatable. Cannot be true for properties whose type
                # is object or user identifier. IsReturnable must be true to set this option.
                # Only supported for Boolean, Date, Double, Integer, and Timestamp
                # properties.
            &quot;datePropertyOptions&quot;: { # Options for date properties.
              &quot;operatorOptions&quot;: { # Optional. Provides a search operator for date properties. # If set, describes how the date should be used as a search operator.
                  # Search operators let users restrict the query to specific fields relevant
                  # to the type of item being searched.
                &quot;lessThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # date property using the less-than operator. For example, if
                    # lessThanOperatorName is *closedbefore* and the property&#x27;s name is
                    # *closeDate*, then queries like *closedbefore:&amp;lt;value&amp;gt;*
                    # show results only where the value of the property named *closeDate* is
                    # earlier than *&amp;lt;value&amp;gt;*.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
                &quot;greaterThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                    # date property using the greater-than operator. For example, if
                    # greaterThanOperatorName is *closedafter* and the property&#x27;s name is
                    # *closeDate*, then queries like *closedafter:&amp;lt;value&amp;gt;*
                    # show results only where the value of the property named *closeDate* is
                    # later than *&amp;lt;value&amp;gt;*.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
                &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the actual string required in the query in order to isolate the
                    # date property. For example, suppose an issue tracking schema object
                    # has a property named *closeDate* that specifies an operator with an
                    # operatorName of *closedon*. For searches on that data, queries like
                    # *closedon:&amp;lt;value&amp;gt;* show results only where the value of the
                    # *closeDate* property matches *&amp;lt;value&amp;gt;*. By contrast, a
                    # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                    # all items where *&amp;lt;value&amp;gt;* matches the value of any String
                    # properties or text within the content field for the indexed datasource.
                    # The operator name can only contain lowercase letters (a-z).
                    # The maximum length is 32 characters.
              },
            },
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # Name for the object, which then defines its type. Item indexing requests
            # should set the
            # objectType field
            # equal to this value. For example, if *name* is *Document*, then indexing
            # requests for items of type Document should set
            # objectType equal to
            # *Document*. Each object definition must be uniquely named within a schema.
            # The name must start with a letter and can only contain letters (A-Z, a-z)
            # or numbers (0-9).
            # The maximum length is 256 characters.
        &quot;options&quot;: { # The options for an object. # The optional object-specific options.
          &quot;freshnessOptions&quot;: { # Indicates which freshness property to use when adjusting search ranking for # The freshness options for an object.
              # an item. Fresher, more recent dates indicate higher quality. Use the
              # freshness option property that best works with your data. For fileshare
              # documents, last modified time is most relevant. For calendar event data,
              # the time when the event occurs is a more relevant freshness indicator. In
              # this way, calendar events that occur closer to the time of the search query
              # are considered higher quality and ranked accordingly.
            &quot;freshnessProperty&quot;: &quot;A String&quot;, # This property indicates the freshness level of the object in the index.
                # If set, this property must be a top-level property within the
                # property definitions
                # and it must be a
                # timestamp type
                # or
                # date type.
                # Otherwise, the Indexing API uses
                # updateTime
                # as the freshness indicator.
                # The maximum length is 256 characters.
                #
                # When a property is used to calculate freshness, the value defaults
                # to 2 years from the current time.
            &quot;freshnessDuration&quot;: &quot;A String&quot;, # The duration after which an object should be considered
                # stale. The default value is 180 days (in seconds).
          },
          &quot;displayOptions&quot;: { # The display options for an object. # Options that determine how the object is displayed in the Cloud Search
              # results page.
            &quot;metalines&quot;: [ # Defines the properties that are displayed in the metalines of the
                # search results. The property values are displayed in the order given
                # here. If a property holds multiple values, all of the values are
                # displayed before the next properties. For this reason, it is a good
                # practice to specify singular properties before repeated properties in this
                # list. All of the properties must set
                # is_returnable
                # to true. The maximum number of metalines is 3.
              { # A metaline is a list of properties that are displayed along with the search
                  # result to provide context.
                &quot;properties&quot;: [ # The list of displayed properties for the metaline. The maximum number of
                    # properties is 5.
                  { # A reference to a top-level property within the object that should be
                      # displayed in search results. The values of the chosen properties is
                      # displayed in the search results along with the
                      # display label
                      # for that property if one is specified. If a display label is not specified,
                      # only the values is shown.
                    &quot;propertyName&quot;: &quot;A String&quot;, # The name of the top-level property as defined in a property definition
                        # for the object. If the name is not a defined property in the schema, an
                        # error is given when attempting to update the schema.
                  },
                ],
              },
            ],
            &quot;objectDisplayLabel&quot;: &quot;A String&quot;, # The user friendly label to display in the search result to indicate the
                # type of the item. This is OPTIONAL; if not provided, an object label isn&#x27;t
                # displayed on the context line of the search results. The maximum length
                # is 64 characters.
          },
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="updateSchema">updateSchema(name, body=None, x__xgafv=None)</code>
  <pre>Updates the schema of a data source. This method does not perform
incremental updates to the schema. Instead, this method updates the schema
by overwriting the entire schema.

**Note:** This API requires an admin or service account to execute.

Args:
  name: string, Name of the data source to update Schema.  Format:
datasources/{source_id} (required)
  body: object, The request body.
    The object takes the form of:

{
    &quot;schema&quot;: { # The schema definition for a data source. # The new schema for the source.
      &quot;operationIds&quot;: [ # IDs of the Long Running Operations (LROs) currently running for this
          # schema. After modifying the schema, wait for operations to complete
          # before indexing additional content.
        &quot;A String&quot;,
      ],
      &quot;objectDefinitions&quot;: [ # The list of top-level objects for the data source.
          # The maximum number of elements is 10.
        { # The definition for an object within a data source.
          &quot;propertyDefinitions&quot;: [ # The property definitions for the object.
              # The maximum number of elements is 1000.
            { # The definition of a property within an object.
              &quot;isRepeatable&quot;: True or False, # Indicates that multiple values are allowed for the property. For example, a
                  # document only has one description but can have multiple comments. Cannot be
                  # true for properties whose type is a boolean.
                  # If set to false, properties that contain more than one value cause the
                  # indexing request for that item to be rejected.
              &quot;htmlPropertyOptions&quot;: { # Options for html properties.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for html properties. This is optional. # If set, describes how the property should be used as a search operator.
                    # Search operators let users restrict the query to specific fields relevant
                    # to the type of item being searched.
                  &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # html property. For example, if operatorName is *subject* and the
                      # property&#x27;s name is *subjectLine*, then queries like
                      # *subject:&amp;lt;value&amp;gt;* show results only where the value of the
                      # property named *subjectLine* matches *&amp;lt;value&amp;gt;*. By contrast, a
                      # search that uses the same *&amp;lt;value&amp;gt;* without an operator return
                      # all items where *&amp;lt;value&amp;gt;* matches the value of any
                      # html properties or text within the content field for the item.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                },
                &quot;retrievalImportance&quot;: { # Indicates the search quality importance of the tokens within the
                    # field when used for retrieval. Can only be set to DEFAULT or NONE.
                  &quot;importance&quot;: &quot;A String&quot;, # Indicates the ranking importance given to property when it is matched
                      # during retrieval. Once set, the token importance of a property cannot be
                      # changed.
                },
              },
              &quot;isReturnable&quot;: True or False, # Indicates that the property identifies data that should be returned in
                  # search results via the Query API. If set to *true*, indicates that Query
                  # API users can use matching property fields in results. However, storing
                  # fields requires more space allocation and uses more bandwidth for search
                  # queries, which impacts performance over large datasets. Set to *true* here
                  # only if the field is needed for search results. Cannot be true for
                  # properties whose type is an object.
              &quot;textPropertyOptions&quot;: { # Options for text properties.
                &quot;retrievalImportance&quot;: { # Indicates the search quality importance of the tokens within the
                    # field when used for retrieval.
                  &quot;importance&quot;: &quot;A String&quot;, # Indicates the ranking importance given to property when it is matched
                      # during retrieval. Once set, the token importance of a property cannot be
                      # changed.
                },
                &quot;operatorOptions&quot;: { # Used to provide a search operator for text properties. This is optional. # If set, describes how the property should be used as a search operator.
                    # Search operators let users restrict the query to specific fields relevant
                    # to the type of item being searched.
                  &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # text property. For example, if operatorName is *subject* and the
                      # property&#x27;s name is *subjectLine*, then queries like
                      # *subject:&amp;lt;value&amp;gt;* show results only where the value of the
                      # property named *subjectLine* matches *&amp;lt;value&amp;gt;*. By contrast, a
                      # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                      # all items where *&amp;lt;value&amp;gt;* matches the value of any
                      # text properties or text within the content field for the item.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                  &quot;exactMatchWithOperator&quot;: True or False, # If true, the text value is tokenized as one atomic value in
                      # operator searches and facet matches. For example, if the operator name is
                      # &quot;genre&quot; and the value is &quot;science-fiction&quot; the query restrictions
                      # &quot;genre:science&quot; and &quot;genre:fiction&quot; doesn&#x27;t match the item;
                      # &quot;genre:science-fiction&quot; does. Value matching is case-sensitive
                      # and does not remove special characters.
                      # If false, the text is tokenized. For example, if the value is
                      # &quot;science-fiction&quot; the queries &quot;genre:science&quot; and &quot;genre:fiction&quot;
                      # matches the item.
                },
              },
              &quot;displayOptions&quot;: { # The display options for a property. # Options that determine how the property is displayed in the Cloud Search
                  # results page if it is specified to be displayed in the object&#x27;s
                  # display options
                  # .
                &quot;displayLabel&quot;: &quot;A String&quot;, # The user friendly label for the property that is used if the property
                    # is specified to be displayed in ObjectDisplayOptions. If provided, the
                    # display label is shown in front of the property values when the property is
                    # part of the object display options. For example, if the property value is
                    # &#x27;1&#x27;, the value by itself may not be useful context for the user. If the
                    # display name given was &#x27;priority&#x27;, then the user sees &#x27;priority : 1&#x27; in
                    # the search results which provides clear context to search users. This is
                    # OPTIONAL; if not given, only the property values are displayed.
                    # The maximum length is 64 characters.
              },
              &quot;timestampPropertyOptions&quot;: { # Options for timestamp properties.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for timestamp properties. This is # If set, describes how the timestamp should be used as a search operator.
                    # optional. Search operators let users restrict the query to specific fields
                    # relevant to the type of item being searched.
                  &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # timestamp property. For example, if operatorName is *closedon* and the
                      # property&#x27;s name is *closeDate*, then queries like
                      # *closedon:&amp;lt;value&amp;gt;* show results only where the value of the
                      # property named *closeDate* matches *&amp;lt;value&amp;gt;*. By contrast, a
                      # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                      # all items where *&amp;lt;value&amp;gt;* matches the value of any String
                      # properties or text within the content field for the item. The operator
                      # name can only contain lowercase letters (a-z). The maximum length is 32
                      # characters.
                  &quot;lessThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # timestamp property using the less-than operator. For example, if
                      # lessThanOperatorName is *closedbefore* and the property&#x27;s name is
                      # *closeDate*, then queries like *closedbefore:&amp;lt;value&amp;gt;*
                      # show results only where the value of the property named *closeDate* is
                      # earlier than *&amp;lt;value&amp;gt;*.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                  &quot;greaterThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # timestamp property using the greater-than operator. For example, if
                      # greaterThanOperatorName is *closedafter* and the property&#x27;s name is
                      # *closeDate*, then queries like *closedafter:&amp;lt;value&amp;gt;*
                      # show results only where the value of the property named *closeDate* is
                      # later than *&amp;lt;value&amp;gt;*.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                },
              },
              &quot;isSuggestable&quot;: True or False, # Indicates that the property can be used for generating query suggestions.
              &quot;objectPropertyOptions&quot;: { # Options for object properties.
                &quot;subobjectProperties&quot;: [ # The properties of the sub-object. These properties represent a nested
                    # object. For example, if this property represents a postal address, the
                    # subobjectProperties might be named *street*, *city*, and *state*.
                    # The maximum number of elements is 1000.
                  # Object with schema name: PropertyDefinition
                ],
              },
              &quot;booleanPropertyOptions&quot;: { # Options for boolean properties.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for boolean properties. This is # If set, describes how the boolean should be used as a search operator.
                    # optional. Search operators let users restrict the query to specific fields
                    # relevant to the type of item being searched.
                  &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # boolean property. For example, if operatorName is *closed* and the
                      # property&#x27;s name is *isClosed*, then queries like
                      # *closed:&amp;lt;value&amp;gt;* show results only where the value of the
                      # property named *isClosed* matches *&amp;lt;value&amp;gt;*. By contrast, a
                      # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                      # all items where *&amp;lt;value&amp;gt;* matches the value of any
                      # String properties or text within the content field for the item.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                },
              },
              &quot;integerPropertyOptions&quot;: { # Options for integer properties.
                &quot;orderedRanking&quot;: &quot;A String&quot;, # Used to specify the ordered ranking for the integer. Can only be used if
                    # isRepeatable
                    # is false.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for integer properties. This is # If set, describes how the integer should be used as a search operator.
                    # optional. Search operators let users restrict the query to specific fields
                    # relevant to the type of item being searched.
                  &quot;greaterThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # integer property using the greater-than operator. For example, if
                      # greaterThanOperatorName is *priorityabove* and the property&#x27;s name is
                      # *priorityVal*, then queries like *priorityabove:&amp;lt;value&amp;gt;*
                      # show results only where the value of the property named *priorityVal* is
                      # greater than *&amp;lt;value&amp;gt;*.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                  &quot;lessThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # integer property using the less-than operator. For example, if
                      # lessThanOperatorName is *prioritybelow* and the property&#x27;s name is
                      # *priorityVal*, then queries like *prioritybelow:&amp;lt;value&amp;gt;*
                      # show results only where the value of the property named *priorityVal* is
                      # less than *&amp;lt;value&amp;gt;*.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                  &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # integer property. For example, if operatorName is *priority* and the
                      # property&#x27;s name is *priorityVal*, then queries like
                      # *priority:&amp;lt;value&amp;gt;* show results only where the value of the
                      # property named *priorityVal* matches *&amp;lt;value&amp;gt;*. By contrast, a
                      # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                      # all items where *&amp;lt;value&amp;gt;* matches the value of any String
                      # properties or text within the content field for the item.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                },
                &quot;minimumValue&quot;: &quot;A String&quot;, # The minimum value of the property. The minimum and maximum values for the
                    # property are used to rank results according to the
                    # ordered ranking.
                    # Indexing requests with values less than the minimum are accepted and
                    # ranked with the same weight as items indexed with the minimum value.
                &quot;maximumValue&quot;: &quot;A String&quot;, # The maximum value of the property. The minimum and maximum values for the
                    # property are used to rank results according to the
                    # ordered ranking.
                    # Indexing requests with values greater than the maximum are accepted and
                    # ranked with the same weight as items indexed with the maximum value.
              },
              &quot;name&quot;: &quot;A String&quot;, # The name of the property. Item indexing requests sent to the Indexing API
                  # should set the property name
                  # equal to this value. For example, if name is *subject_line*, then indexing
                  # requests for document items with subject fields should set the
                  # name for that field equal to
                  # *subject_line*. Use the name as the identifier for the object property.
                  # Once registered as a property for an object, you cannot re-use this name
                  # for another property within that object.
                  # The name must start with a letter and can only contain letters (A-Z, a-z)
                  # or numbers (0-9).
                  # The maximum length is 256 characters.
              &quot;isFacetable&quot;: True or False, # Indicates that the property can be used for generating facets. Cannot be
                  # true for properties whose type is object. IsReturnable must be true to set
                  # this option.
                  # Only supported for Boolean, Enum, and Text properties.
              &quot;doublePropertyOptions&quot;: { # Options for double properties.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for double properties. This is # If set, describes how the double should be used as a search operator.
                    # optional. Search operators let users restrict the query to specific fields
                    # relevant to the type of item being searched.
                  &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to use the
                      # double property in sorting or as a facet.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                },
              },
              &quot;isWildcardSearchable&quot;: True or False, # Indicates that users can perform wildcard search for this
                  # property. Only supported for Text properties. IsReturnable must be true to
                  # set this option. In a given datasource maximum of 5 properties can be
                  # marked as is_wildcard_searchable.
              &quot;enumPropertyOptions&quot;: { # Options for enum properties, which allow you to define a restricted set of
                  # strings to match user queries, set rankings for those string values, and
                  # define an operator name to be paired with those strings so that users can
                  # narrow results to only items with a specific value. For example, for items in
                  # a request tracking system with priority information, you could define *p0* as
                  # an allowable enum value and tie this enum to the operator name *priority* so
                  # that search users could add *priority:p0* to their query to restrict the set
                  # of results to only those items indexed with the value *p0*.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for enum properties. This is # If set, describes how the enum should be used as a search operator.
                    # optional. Search operators let users restrict the query to specific fields
                    # relevant to the type of item being searched. For example, if you provide no
                    # operator for a *priority* enum property with possible values *p0* and *p1*,
                    # a query that contains the term *p0* returns items that have *p0* as the
                    # value of the *priority* property, as well as any items that contain the
                    # string *p0* in other fields. If you provide an operator name for the enum,
                    # such as *priority*, then search users can use that operator to refine
                    # results to only items that have *p0* as this property&#x27;s value, with the
                    # query *priority:p0*.
                  &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # enum property. For example, if operatorName is *priority* and the
                      # property&#x27;s name is *priorityVal*, then queries like
                      # *priority:&amp;lt;value&amp;gt;* show results only where the value of the
                      # property named *priorityVal* matches *&amp;lt;value&amp;gt;*. By contrast, a
                      # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                      # all items where *&amp;lt;value&amp;gt;* matches the value of any String
                      # properties or text within the content field for the item.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                },
                &quot;orderedRanking&quot;: &quot;A String&quot;, # Used to specify the ordered ranking for the enumeration that determines how
                    # the integer values provided in the possible EnumValuePairs are used to rank
                    # results. If specified, integer values must be provided for all possible
                    # EnumValuePair values given for this property. Can only be used if
                    # isRepeatable
                    # is false.
                &quot;possibleValues&quot;: [ # The list of possible values for the enumeration property. All
                    # EnumValuePairs must provide a string value. If you specify an integer value
                    # for one EnumValuePair, then all possible EnumValuePairs must provide an
                    # integer value. Both the string value and integer value must be unique over
                    # all possible values. Once set, possible values cannot be removed or
                    # modified. If you supply an ordered ranking and think you might insert
                    # additional enum values in the future, leave gaps in the initial integer
                    # values to allow adding a value in between previously registered values.
                    # The maximum number of elements is 100.
                  { # The enumeration value pair defines two things: a required string value and
                      # an optional integer value. The string value defines the necessary query
                      # term required to retrieve that item, such as *p0* for a priority item.
                      # The integer value determines the ranking of that string value relative
                      # to other enumerated values for the same property. For example, you might
                      # associate *p0* with *0* and define another enum pair such as *p1* and *1*.
                      # You must use the integer value in combination with
                      # ordered
                      # ranking to
                      # set the ranking of a given value relative to other enumerated values for
                      # the same property name. Here, a ranking order of DESCENDING for *priority*
                      # properties results in a ranking boost for items indexed with a value of
                      # *p0* compared to items indexed with a value of *p1*. Without a specified
                      # ranking order, the integer value has no effect on item ranking.
                    &quot;integerValue&quot;: 42, # The integer value of the EnumValuePair which must be non-negative.
                        # Optional.
                    &quot;stringValue&quot;: &quot;A String&quot;, # The string value of the EnumValuePair.
                        # The maximum length is 32 characters.
                  },
                ],
              },
              &quot;isSortable&quot;: True or False, # Indicates that the property can be used for sorting. Cannot be true for
                  # properties that are repeatable. Cannot be true for properties whose type
                  # is object or user identifier. IsReturnable must be true to set this option.
                  # Only supported for Boolean, Date, Double, Integer, and Timestamp
                  # properties.
              &quot;datePropertyOptions&quot;: { # Options for date properties.
                &quot;operatorOptions&quot;: { # Optional. Provides a search operator for date properties. # If set, describes how the date should be used as a search operator.
                    # Search operators let users restrict the query to specific fields relevant
                    # to the type of item being searched.
                  &quot;lessThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # date property using the less-than operator. For example, if
                      # lessThanOperatorName is *closedbefore* and the property&#x27;s name is
                      # *closeDate*, then queries like *closedbefore:&amp;lt;value&amp;gt;*
                      # show results only where the value of the property named *closeDate* is
                      # earlier than *&amp;lt;value&amp;gt;*.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                  &quot;greaterThanOperatorName&quot;: &quot;A String&quot;, # Indicates the operator name required in the query in order to isolate the
                      # date property using the greater-than operator. For example, if
                      # greaterThanOperatorName is *closedafter* and the property&#x27;s name is
                      # *closeDate*, then queries like *closedafter:&amp;lt;value&amp;gt;*
                      # show results only where the value of the property named *closeDate* is
                      # later than *&amp;lt;value&amp;gt;*.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                  &quot;operatorName&quot;: &quot;A String&quot;, # Indicates the actual string required in the query in order to isolate the
                      # date property. For example, suppose an issue tracking schema object
                      # has a property named *closeDate* that specifies an operator with an
                      # operatorName of *closedon*. For searches on that data, queries like
                      # *closedon:&amp;lt;value&amp;gt;* show results only where the value of the
                      # *closeDate* property matches *&amp;lt;value&amp;gt;*. By contrast, a
                      # search that uses the same *&amp;lt;value&amp;gt;* without an operator returns
                      # all items where *&amp;lt;value&amp;gt;* matches the value of any String
                      # properties or text within the content field for the indexed datasource.
                      # The operator name can only contain lowercase letters (a-z).
                      # The maximum length is 32 characters.
                },
              },
            },
          ],
          &quot;name&quot;: &quot;A String&quot;, # Name for the object, which then defines its type. Item indexing requests
              # should set the
              # objectType field
              # equal to this value. For example, if *name* is *Document*, then indexing
              # requests for items of type Document should set
              # objectType equal to
              # *Document*. Each object definition must be uniquely named within a schema.
              # The name must start with a letter and can only contain letters (A-Z, a-z)
              # or numbers (0-9).
              # The maximum length is 256 characters.
          &quot;options&quot;: { # The options for an object. # The optional object-specific options.
            &quot;freshnessOptions&quot;: { # Indicates which freshness property to use when adjusting search ranking for # The freshness options for an object.
                # an item. Fresher, more recent dates indicate higher quality. Use the
                # freshness option property that best works with your data. For fileshare
                # documents, last modified time is most relevant. For calendar event data,
                # the time when the event occurs is a more relevant freshness indicator. In
                # this way, calendar events that occur closer to the time of the search query
                # are considered higher quality and ranked accordingly.
              &quot;freshnessProperty&quot;: &quot;A String&quot;, # This property indicates the freshness level of the object in the index.
                  # If set, this property must be a top-level property within the
                  # property definitions
                  # and it must be a
                  # timestamp type
                  # or
                  # date type.
                  # Otherwise, the Indexing API uses
                  # updateTime
                  # as the freshness indicator.
                  # The maximum length is 256 characters.
                  #
                  # When a property is used to calculate freshness, the value defaults
                  # to 2 years from the current time.
              &quot;freshnessDuration&quot;: &quot;A String&quot;, # The duration after which an object should be considered
                  # stale. The default value is 180 days (in seconds).
            },
            &quot;displayOptions&quot;: { # The display options for an object. # Options that determine how the object is displayed in the Cloud Search
                # results page.
              &quot;metalines&quot;: [ # Defines the properties that are displayed in the metalines of the
                  # search results. The property values are displayed in the order given
                  # here. If a property holds multiple values, all of the values are
                  # displayed before the next properties. For this reason, it is a good
                  # practice to specify singular properties before repeated properties in this
                  # list. All of the properties must set
                  # is_returnable
                  # to true. The maximum number of metalines is 3.
                { # A metaline is a list of properties that are displayed along with the search
                    # result to provide context.
                  &quot;properties&quot;: [ # The list of displayed properties for the metaline. The maximum number of
                      # properties is 5.
                    { # A reference to a top-level property within the object that should be
                        # displayed in search results. The values of the chosen properties is
                        # displayed in the search results along with the
                        # display label
                        # for that property if one is specified. If a display label is not specified,
                        # only the values is shown.
                      &quot;propertyName&quot;: &quot;A String&quot;, # The name of the top-level property as defined in a property definition
                          # for the object. If the name is not a defined property in the schema, an
                          # error is given when attempting to update the schema.
                    },
                  ],
                },
              ],
              &quot;objectDisplayLabel&quot;: &quot;A String&quot;, # The user friendly label to display in the search result to indicate the
                  # type of the item. This is OPTIONAL; if not provided, an object label isn&#x27;t
                  # displayed on the context line of the search results. The maximum length
                  # is 64 characters.
            },
          },
        },
      ],
    },
    &quot;validateOnly&quot;: True or False, # If true, the schema will be checked for validity,
        # but will not be registered with the data source, even if valid.
    &quot;debugOptions&quot;: { # Shared request debug options for all cloudsearch RPC methods. # Common debug options.
      &quot;enableDebugging&quot;: 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.
    &quot;response&quot;: { # 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`.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;metadata&quot;: { # 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.
      &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
    },
    &quot;error&quot;: { # 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).
      &quot;details&quot;: [ # A list of messages that carry the error details.  There is a common set of
          # message types for APIs to use.
        {
          &quot;a_key&quot;: &quot;&quot;, # Properties of the object. Contains field @type with type URL.
        },
      ],
      &quot;message&quot;: &quot;A String&quot;, # 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.
      &quot;code&quot;: 42, # The status code, which should be an enum value of google.rpc.Code.
    },
    &quot;name&quot;: &quot;A String&quot;, # 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}`.
    &quot;done&quot;: 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.
  }</pre>
</div>

</body></html>