<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;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;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;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;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;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;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;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;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;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;propertyDefinitions&quot;: [ # The property definitions for the object. The maximum number of elements is 1000.
        { # The definition of a property within an object.
          &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;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;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;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;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;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;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;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;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;htmlPropertyOptions&quot;: { # Options for html properties.
            &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;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;integerPropertyOptions&quot;: { # Options for integer properties.
            &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;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;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;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;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;orderedRanking&quot;: &quot;A String&quot;, # Used to specify the ordered ranking for the integer. Can only be used if isRepeatable is false.
          },
          &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;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;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;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. IsReturnable must be true to set this option. Only supported for Boolean, Date, Double, Integer, and Timestamp properties.
          &quot;isSuggestable&quot;: True or False, # Indicates that the property can be used for generating query suggestions.
          &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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;propertyDefinitions&quot;: [ # The property definitions for the object. The maximum number of elements is 1000.
          { # The definition of a property within an object.
            &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;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;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;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;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;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;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;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;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;htmlPropertyOptions&quot;: { # Options for html properties.
              &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;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;integerPropertyOptions&quot;: { # Options for integer properties.
              &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;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;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;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;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;orderedRanking&quot;: &quot;A String&quot;, # Used to specify the ordered ranking for the integer. Can only be used if isRepeatable is false.
            },
            &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;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;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;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. IsReturnable must be true to set this option. Only supported for Boolean, Date, Double, Integer, and Timestamp properties.
            &quot;isSuggestable&quot;: True or False, # Indicates that the property can be used for generating query suggestions.
            &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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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;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>