<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="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</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. **Note:** This API requires an admin or service account to execute.</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. **Note:** This API requires an admin or service account to execute.</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 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.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<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;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
      &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;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;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;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;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.
    &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.
    },
  }</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;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;doublePropertyOptions&quot;: { # Options for double properties.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for double properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the double should be used as a search operator.
                &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;isSuggestable&quot;: True or False, # Indicates that the property can be used for generating query suggestions.
            &quot;timestampPropertyOptions&quot;: { # Options for timestamp properties.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for timestamp properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the timestamp should be used as a search operator.
                &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:&lt;value&gt;* show results only where the value of the property named *closeDate* is earlier than *&lt;value&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 timestamp property. For example, if operatorName is *closedon* and the property&#x27;s name is *closeDate*, then queries like *closedon:&lt;value&gt;* show results only where the value of the property named *closeDate* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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;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:&lt;value&gt;* show results only where the value of the property named *closeDate* is later than *&lt;value&gt;*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.
              },
            },
            &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;textPropertyOptions&quot;: { # Options for text properties.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for text properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the property should be used as a search operator.
                &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:&lt;value&gt;* show results only where the value of the property named *subjectLine* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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;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;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;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;htmlPropertyOptions&quot;: { # Options for html properties.
              &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;operatorOptions&quot;: { # Used to provide a search operator for html properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the property should be used as a search operator.
                &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:&lt;value&gt;* show results only where the value of the property named *subjectLine* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator return all items where *&lt;value&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;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;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;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;booleanPropertyOptions&quot;: { # Options for boolean properties.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for boolean properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the boolean should be used as a search operator.
                &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:&lt;value&gt;* show results only where the value of the property named *isClosed* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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;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;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 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*. # If set, describes how the enum should be used as a search operator.
                &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:&lt;value&gt;* show results only where the value of the property named *priorityVal* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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;stringValue&quot;: &quot;A String&quot;, # The string value of the EnumValuePair. The maximum length is 32 characters.
                  &quot;integerValue&quot;: 42, # The integer value of the EnumValuePair which must be non-negative. Optional.
                },
              ],
            },
            &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;datePropertyOptions&quot;: { # Options for date properties.
              &quot;operatorOptions&quot;: { # Optional. Provides a search operator for date properties. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the date should be used as a search operator.
                &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:&lt;value&gt;* show results only where the value of the *closeDate* property matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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;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:&lt;value&gt;* show results only where the value of the property named *closeDate* is earlier than *&lt;value&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:&lt;value&gt;* show results only where the value of the property named *closeDate* is later than *&lt;value&gt;*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.
              },
            },
            &quot;integerPropertyOptions&quot;: { # Options for integer properties.
              &quot;operatorOptions&quot;: { # Used to provide a search operator for integer properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the integer should be used as a search operator.
                &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:&lt;value&gt;* show results only where the value of the property named *priorityVal* is greater than *&lt;value&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:&lt;value&gt;* show results only where the value of the property named *priorityVal* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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 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:&lt;value&gt;* show results only where the value of the property named *priorityVal* is less than *&lt;value&gt;*. 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;orderedRanking&quot;: &quot;A String&quot;, # Used to specify the ordered ranking for the integer. Can only be used if isRepeatable is false.
              &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;options&quot;: { # The options for an object. # The optional object-specific options.
          &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;freshnessOptions&quot;: { # Indicates which freshness property to use when adjusting search ranking for 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. # The freshness options for an object.
            &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;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;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;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;,
    ],
  }</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;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;doublePropertyOptions&quot;: { # Options for double properties.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for double properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the double should be used as a search operator.
                  &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;isSuggestable&quot;: True or False, # Indicates that the property can be used for generating query suggestions.
              &quot;timestampPropertyOptions&quot;: { # Options for timestamp properties.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for timestamp properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the timestamp should be used as a search operator.
                  &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:&lt;value&gt;* show results only where the value of the property named *closeDate* is earlier than *&lt;value&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 timestamp property. For example, if operatorName is *closedon* and the property&#x27;s name is *closeDate*, then queries like *closedon:&lt;value&gt;* show results only where the value of the property named *closeDate* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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;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:&lt;value&gt;* show results only where the value of the property named *closeDate* is later than *&lt;value&gt;*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.
                },
              },
              &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;textPropertyOptions&quot;: { # Options for text properties.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for text properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the property should be used as a search operator.
                  &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:&lt;value&gt;* show results only where the value of the property named *subjectLine* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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;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;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;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;htmlPropertyOptions&quot;: { # Options for html properties.
                &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;operatorOptions&quot;: { # Used to provide a search operator for html properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the property should be used as a search operator.
                  &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:&lt;value&gt;* show results only where the value of the property named *subjectLine* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator return all items where *&lt;value&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;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;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;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;booleanPropertyOptions&quot;: { # Options for boolean properties.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for boolean properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the boolean should be used as a search operator.
                  &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:&lt;value&gt;* show results only where the value of the property named *isClosed* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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;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;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 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*. # If set, describes how the enum should be used as a search operator.
                  &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:&lt;value&gt;* show results only where the value of the property named *priorityVal* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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;stringValue&quot;: &quot;A String&quot;, # The string value of the EnumValuePair. The maximum length is 32 characters.
                    &quot;integerValue&quot;: 42, # The integer value of the EnumValuePair which must be non-negative. Optional.
                  },
                ],
              },
              &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;datePropertyOptions&quot;: { # Options for date properties.
                &quot;operatorOptions&quot;: { # Optional. Provides a search operator for date properties. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the date should be used as a search operator.
                  &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:&lt;value&gt;* show results only where the value of the *closeDate* property matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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;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:&lt;value&gt;* show results only where the value of the property named *closeDate* is earlier than *&lt;value&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:&lt;value&gt;* show results only where the value of the property named *closeDate* is later than *&lt;value&gt;*. The operator name can only contain lowercase letters (a-z). The maximum length is 32 characters.
                },
              },
              &quot;integerPropertyOptions&quot;: { # Options for integer properties.
                &quot;operatorOptions&quot;: { # Used to provide a search operator for integer properties. This is optional. Search operators let users restrict the query to specific fields relevant to the type of item being searched. # If set, describes how the integer should be used as a search operator.
                  &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:&lt;value&gt;* show results only where the value of the property named *priorityVal* is greater than *&lt;value&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:&lt;value&gt;* show results only where the value of the property named *priorityVal* matches *&lt;value&gt;*. By contrast, a search that uses the same *&lt;value&gt;* without an operator returns all items where *&lt;value&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 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:&lt;value&gt;* show results only where the value of the property named *priorityVal* is less than *&lt;value&gt;*. 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;orderedRanking&quot;: &quot;A String&quot;, # Used to specify the ordered ranking for the integer. Can only be used if isRepeatable is false.
                &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;options&quot;: { # The options for an object. # The optional object-specific options.
            &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;freshnessOptions&quot;: { # Indicates which freshness property to use when adjusting search ranking for 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. # The freshness options for an object.
              &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;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;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;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;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.
    },
    &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.
  }

  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;error&quot;: { # The `Status` type defines a logical error model that is suitable for 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). # The error result of the operation in case of failure or cancellation.
      &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;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;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;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;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.
    &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.
    },
  }</pre>
</div>

</body></html>