<html><body>
<style>

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

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

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

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

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

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

pre {
  margin-top: 0.5em;
}

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

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

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

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

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

</style>

<h1><a href="cloudsearch_v1.html">Cloud Search API</a> . <a href="cloudsearch_v1.indexing.html">indexing</a> . <a href="cloudsearch_v1.indexing.datasources.html">datasources</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="cloudsearch_v1.indexing.datasources.items.html">items()</a></code>
</p>
<p class="firstline">Returns the items Resource.</p>

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

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

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

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.
    "objectDefinitions": [ # 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.
        "propertyDefinitions": [ # The property definitions for the object.
            # The maximum number of elements is 1000.
          { # The definition of a property within an object.
            "htmlPropertyOptions": { # Options for html properties.
              "retrievalImportance": { # Indicates the search quality importance of the tokens within the
                  # field when used for retrieval. Can only be set to DEFAULT or NONE.
                "importance": "A String", # Indicates the ranking importance given to property when it is matched
                    # during retrieval. Once set, the token importance of a property cannot be
                    # changed.
              },
              "operatorOptions": { # Used to provide a search operator for html properties. This is optional. # If set, describes how the property should be used as a search operator.
                  # Search operators let users restrict the query to specific fields relevant
                  # to the type of item being searched.
                "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                    # html property. For example, if operatorName is *subject* and the
                    # property's name is *subjectLine*, then queries like
                    # *subject:&lt;value&gt;* will 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 will 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.
              },
            },
            "textPropertyOptions": { # Options for text properties.
              "retrievalImportance": { # Indicates the search quality importance of the tokens within the
                  # field when used for retrieval.
                "importance": "A String", # Indicates the ranking importance given to property when it is matched
                    # during retrieval. Once set, the token importance of a property cannot be
                    # changed.
              },
              "operatorOptions": { # Used to provide a search operator for text properties. This is optional. # If set, describes how the property should be used as a search operator.
                  # Search operators let users restrict the query to specific fields relevant
                  # to the type of item being searched.
                "exactMatchWithOperator": True or False, # If true, the text value will be tokenized as one atomic value in
                    # operator searches and facet matches. For example, if the operator name is
                    # "genre" and the value is "science-fiction" the query restrictions
                    # "genre:science" and "genre:fiction" will not match the item;
                    # "genre:science-fiction" will. Value matching is case-sensitive
                    # and does not remove special characters.
                    # If false, the text will be tokenized. For example, if the value is
                    # "science-fiction" the queries "genre:science" and "genre:fiction" will
                    # match the item.
                "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                    # text property. For example, if operatorName is *subject* and the
                    # property's name is *subjectLine*, then queries like
                    # *subject:&lt;value&gt;* will 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 will return
                    # 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.
              },
            },
            "name": "A String", # 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.
            "enumPropertyOptions": { # 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*.
              "orderedRanking": "A String", # 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.
              "operatorOptions": { # Used to provide a search operator for enum properties. This is # If set, describes how the enum should be used as a search operator.
                  # optional. Search operators let users restrict the query to specific fields
                  # relevant to the type of item being searched. For example, if you provide no
                  # operator for a *priority* enum property with possible values *p0* and *p1*,
                  # a query that contains the term *p0* will return 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's value, with the
                  # query *priority:p0*.
                "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                    # enum property. For example, if operatorName is *priority* and the
                    # property's name is *priorityVal*, then queries like
                    # *priority:&lt;value&gt;* will 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 will return
                    # 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.
              },
              "possibleValues": [ # 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.
                  "stringValue": "A String", # The string value of the EnumValuePair.
                      # The maximum length is 32 characters.
                  "integerValue": 42, # The integer value of the EnumValuePair which must be non-negative.
                      # Optional.
                },
              ],
            },
            "isReturnable": 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.
            "isSortable": 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.
            "objectPropertyOptions": { # Options for object properties.
              "subobjectProperties": [ # 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
              ],
            },
            "timestampPropertyOptions": { # Options for timestamp properties.
              "operatorOptions": { # Used to provide a search operator for timestamp properties. This is # If set, describes how the timestamp should be used as a search operator.
                  # optional. Search operators let users restrict the query to specific fields
                  # relevant to the type of item being searched.
                "lessThanOperatorName": "A String", # 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's name is
                    # *closeDate*, then queries like *closedbefore:&lt;value&gt;* will
                    # 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.
                "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                    # timestamp property. For example, if operatorName is *closedon* and the
                    # property's name is *closeDate*, then queries like
                    # *closedon:&lt;value&gt;* will 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 will return
                    # 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.
                "greaterThanOperatorName": "A String", # 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's name is
                    # *closeDate*, then queries like *closedafter:&lt;value&gt;* will
                    # 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.
              },
            },
            "datePropertyOptions": { # Options for date properties.
              "operatorOptions": { # Optional. Provides a search operator for date properties. # If set, describes how the date should be used as a search operator.
                  # Search operators let users restrict the query to specific fields relevant
                  # to the type of item being searched.
                "lessThanOperatorName": "A String", # 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's name is
                    # *closeDate*, then queries like *closedbefore:&lt;value&gt;* will
                    # 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.
                "operatorName": "A String", # 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;* will 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 will return
                    # 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.
                "greaterThanOperatorName": "A String", # 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's name is
                    # *closeDate*, then queries like *closedafter:&lt;value&gt;* will
                    # 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.
              },
            },
            "displayOptions": { # 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's
                # display options
                # .
              "displayLabel": "A String", # The user friendly label for the property that will be used if the property
                  # is specified to be displayed in ObjectDisplayOptions. If given, the display
                  # label will be shown in front of the property values when the property is
                  # part of the object display options. For example, if the property value is
                  # '1', the value by itself may not be useful context for the user. If the
                  # display name given was 'priority', then the user will see 'priority : 1' in
                  # the search results which provides clear conext to search users. This is
                  # OPTIONAL; if not given, only the property values will be displayed.
                  # The maximum length is 32 characters.
            },
            "booleanPropertyOptions": { # Options for boolean properties.
              "operatorOptions": { # Used to provide a search operator for boolean properties. This is # If set, describes how the boolean should be used as a search operator.
                  # optional. Search operators let users restrict the query to specific fields
                  # relevant to the type of item being searched.
                "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                    # boolean property. For example, if operatorName is *closed* and the
                    # property's name is *isClosed*, then queries like
                    # *closed:&lt;value&gt;* will 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 will return
                    # 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.
              },
            },
            "isFacetable": 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.
            "doublePropertyOptions": { # Options for double properties.
              "operatorOptions": { # Used to provide a search operator for double properties. This is # If set, describes how the double should be used as a search operator.
                  # optional. Search operators let users restrict the query to specific fields
                  # relevant to the type of item being searched.
                "operatorName": "A String", # 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.
              },
            },
            "isRepeatable": 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 will cause the
                # indexing request for that item to be rejected.
            "isWildcardSearchable": 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.
                #
                # Note: This is an alpha feature and is enabled for whitelisted users only.
            "integerPropertyOptions": { # Options for integer properties.
              "orderedRanking": "A String", # Used to specify the ordered ranking for the integer. Can only be used if
                  # isRepeatable
                  # is false.
              "minimumValue": "A String", # 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.
              "operatorOptions": { # Used to provide a search operator for integer properties. This is # If set, describes how the integer should be used as a search operator.
                  # optional. Search operators let users restrict the query to specific fields
                  # relevant to the type of item being searched.
                "lessThanOperatorName": "A String", # 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's name is
                    # *priorityVal*, then queries like *prioritybelow:&lt;value&gt;* will
                    # 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.
                "greaterThanOperatorName": "A String", # 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's name is
                    # *priorityVal*, then queries like *priorityabove:&lt;value&gt;* will
                    # 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.
                "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                    # integer property. For example, if operatorName is *priority* and the
                    # property's name is *priorityVal*, then queries like
                    # *priority:&lt;value&gt;* will 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 will return
                    # 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.
              },
              "maximumValue": "A String", # 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.
            },
          },
        ],
        "name": "A String", # 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.
        "options": { # The options for an object. # The optional object-specific options.
          "freshnessOptions": { # Indicates which freshness property to use when adjusting search ranking for # The freshness options for an object.
              # an item. Fresher, more recent dates indicate higher quality. Use the
              # freshness option property that best works with your data. For fileshare
              # documents, last modified time is most relevant. For calendar event data,
              # the time when the event occurs is a more relevant freshness indicator. In
              # this way, calendar events that occur closer to the time of the search query
              # are considered higher quality and ranked accordingly.
            "freshnessDuration": "A String", # The duration after which an object should be considered
                # stale. The default value is 180 days (in seconds).
            "freshnessProperty": "A String", # 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 fresheness, the value defaults
                # to 2 years from the current time.
          },
          "displayOptions": { # The display options for an object. # Options that determine how the object is displayed in the Cloud Search
              # results page.
            "metalines": [ # Defines the properties that will be displayed in the metalines of the
                # search results. The property values will be displayed in the order given
                # here. If a property holds multiple values, all of the values will be
                # diplayed 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.
                "properties": [ # The list of displayed properties for the metaline. The maxiumum 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 will be
                      # displayed in the search results along with the
                      # dislpay label
                      # for that property if one is specified. If a display label is not specified,
                      # only the values will be shown.
                    "propertyName": "A String", # 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 will be given when attempting to update the schema.
                  },
                ],
              },
            ],
            "objectDisplayLabel": "A String", # The user friendly label to display in the search result to inidicate the
                # type of the item. This is OPTIONAL; if not given, an object label will not
                # be displayed on the context line of the search results. The maximum length
                # is 32 characters.
          },
        },
      },
    ],
    "operationIds": [ # 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.
      "A String",
    ],
  }</pre>
</div>

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

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

{
    "validateOnly": True or False, # If true, the request will be validated without side effects.
    "debugOptions": { # Shared request debug options for all cloudsearch RPC methods. # Common debug options.
      "enableDebugging": True or False, # If you are asked by Google to help with debugging, set this field.
          # Otherwise, ignore this field.
    },
    "schema": { # The schema definition for a data source. # The new schema for the source.
      "objectDefinitions": [ # 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.
          "propertyDefinitions": [ # The property definitions for the object.
              # The maximum number of elements is 1000.
            { # The definition of a property within an object.
              "htmlPropertyOptions": { # Options for html properties.
                "retrievalImportance": { # Indicates the search quality importance of the tokens within the
                    # field when used for retrieval. Can only be set to DEFAULT or NONE.
                  "importance": "A String", # Indicates the ranking importance given to property when it is matched
                      # during retrieval. Once set, the token importance of a property cannot be
                      # changed.
                },
                "operatorOptions": { # Used to provide a search operator for html properties. This is optional. # If set, describes how the property should be used as a search operator.
                    # Search operators let users restrict the query to specific fields relevant
                    # to the type of item being searched.
                  "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                      # html property. For example, if operatorName is *subject* and the
                      # property's name is *subjectLine*, then queries like
                      # *subject:&lt;value&gt;* will 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 will 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.
                },
              },
              "textPropertyOptions": { # Options for text properties.
                "retrievalImportance": { # Indicates the search quality importance of the tokens within the
                    # field when used for retrieval.
                  "importance": "A String", # Indicates the ranking importance given to property when it is matched
                      # during retrieval. Once set, the token importance of a property cannot be
                      # changed.
                },
                "operatorOptions": { # Used to provide a search operator for text properties. This is optional. # If set, describes how the property should be used as a search operator.
                    # Search operators let users restrict the query to specific fields relevant
                    # to the type of item being searched.
                  "exactMatchWithOperator": True or False, # If true, the text value will be tokenized as one atomic value in
                      # operator searches and facet matches. For example, if the operator name is
                      # "genre" and the value is "science-fiction" the query restrictions
                      # "genre:science" and "genre:fiction" will not match the item;
                      # "genre:science-fiction" will. Value matching is case-sensitive
                      # and does not remove special characters.
                      # If false, the text will be tokenized. For example, if the value is
                      # "science-fiction" the queries "genre:science" and "genre:fiction" will
                      # match the item.
                  "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                      # text property. For example, if operatorName is *subject* and the
                      # property's name is *subjectLine*, then queries like
                      # *subject:&lt;value&gt;* will 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 will return
                      # 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.
                },
              },
              "name": "A String", # 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.
              "enumPropertyOptions": { # 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*.
                "orderedRanking": "A String", # 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.
                "operatorOptions": { # Used to provide a search operator for enum properties. This is # If set, describes how the enum should be used as a search operator.
                    # optional. Search operators let users restrict the query to specific fields
                    # relevant to the type of item being searched. For example, if you provide no
                    # operator for a *priority* enum property with possible values *p0* and *p1*,
                    # a query that contains the term *p0* will return 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's value, with the
                    # query *priority:p0*.
                  "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                      # enum property. For example, if operatorName is *priority* and the
                      # property's name is *priorityVal*, then queries like
                      # *priority:&lt;value&gt;* will 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 will return
                      # 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.
                },
                "possibleValues": [ # 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.
                    "stringValue": "A String", # The string value of the EnumValuePair.
                        # The maximum length is 32 characters.
                    "integerValue": 42, # The integer value of the EnumValuePair which must be non-negative.
                        # Optional.
                  },
                ],
              },
              "isReturnable": 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.
              "isSortable": 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.
              "objectPropertyOptions": { # Options for object properties.
                "subobjectProperties": [ # 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
                ],
              },
              "timestampPropertyOptions": { # Options for timestamp properties.
                "operatorOptions": { # Used to provide a search operator for timestamp properties. This is # If set, describes how the timestamp should be used as a search operator.
                    # optional. Search operators let users restrict the query to specific fields
                    # relevant to the type of item being searched.
                  "lessThanOperatorName": "A String", # 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's name is
                      # *closeDate*, then queries like *closedbefore:&lt;value&gt;* will
                      # 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.
                  "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                      # timestamp property. For example, if operatorName is *closedon* and the
                      # property's name is *closeDate*, then queries like
                      # *closedon:&lt;value&gt;* will 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 will return
                      # 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.
                  "greaterThanOperatorName": "A String", # 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's name is
                      # *closeDate*, then queries like *closedafter:&lt;value&gt;* will
                      # 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.
                },
              },
              "datePropertyOptions": { # Options for date properties.
                "operatorOptions": { # Optional. Provides a search operator for date properties. # If set, describes how the date should be used as a search operator.
                    # Search operators let users restrict the query to specific fields relevant
                    # to the type of item being searched.
                  "lessThanOperatorName": "A String", # 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's name is
                      # *closeDate*, then queries like *closedbefore:&lt;value&gt;* will
                      # 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.
                  "operatorName": "A String", # 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;* will 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 will return
                      # 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.
                  "greaterThanOperatorName": "A String", # 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's name is
                      # *closeDate*, then queries like *closedafter:&lt;value&gt;* will
                      # 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.
                },
              },
              "displayOptions": { # 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's
                  # display options
                  # .
                "displayLabel": "A String", # The user friendly label for the property that will be used if the property
                    # is specified to be displayed in ObjectDisplayOptions. If given, the display
                    # label will be shown in front of the property values when the property is
                    # part of the object display options. For example, if the property value is
                    # '1', the value by itself may not be useful context for the user. If the
                    # display name given was 'priority', then the user will see 'priority : 1' in
                    # the search results which provides clear conext to search users. This is
                    # OPTIONAL; if not given, only the property values will be displayed.
                    # The maximum length is 32 characters.
              },
              "booleanPropertyOptions": { # Options for boolean properties.
                "operatorOptions": { # Used to provide a search operator for boolean properties. This is # If set, describes how the boolean should be used as a search operator.
                    # optional. Search operators let users restrict the query to specific fields
                    # relevant to the type of item being searched.
                  "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                      # boolean property. For example, if operatorName is *closed* and the
                      # property's name is *isClosed*, then queries like
                      # *closed:&lt;value&gt;* will 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 will return
                      # 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.
                },
              },
              "isFacetable": 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.
              "doublePropertyOptions": { # Options for double properties.
                "operatorOptions": { # Used to provide a search operator for double properties. This is # If set, describes how the double should be used as a search operator.
                    # optional. Search operators let users restrict the query to specific fields
                    # relevant to the type of item being searched.
                  "operatorName": "A String", # 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.
                },
              },
              "isRepeatable": 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 will cause the
                  # indexing request for that item to be rejected.
              "isWildcardSearchable": 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.
                  #
                  # Note: This is an alpha feature and is enabled for whitelisted users only.
              "integerPropertyOptions": { # Options for integer properties.
                "orderedRanking": "A String", # Used to specify the ordered ranking for the integer. Can only be used if
                    # isRepeatable
                    # is false.
                "minimumValue": "A String", # 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.
                "operatorOptions": { # Used to provide a search operator for integer properties. This is # If set, describes how the integer should be used as a search operator.
                    # optional. Search operators let users restrict the query to specific fields
                    # relevant to the type of item being searched.
                  "lessThanOperatorName": "A String", # 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's name is
                      # *priorityVal*, then queries like *prioritybelow:&lt;value&gt;* will
                      # 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.
                  "greaterThanOperatorName": "A String", # 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's name is
                      # *priorityVal*, then queries like *priorityabove:&lt;value&gt;* will
                      # 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.
                  "operatorName": "A String", # Indicates the operator name required in the query in order to isolate the
                      # integer property. For example, if operatorName is *priority* and the
                      # property's name is *priorityVal*, then queries like
                      # *priority:&lt;value&gt;* will 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 will return
                      # 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.
                },
                "maximumValue": "A String", # 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.
              },
            },
          ],
          "name": "A String", # 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.
          "options": { # The options for an object. # The optional object-specific options.
            "freshnessOptions": { # Indicates which freshness property to use when adjusting search ranking for # The freshness options for an object.
                # an item. Fresher, more recent dates indicate higher quality. Use the
                # freshness option property that best works with your data. For fileshare
                # documents, last modified time is most relevant. For calendar event data,
                # the time when the event occurs is a more relevant freshness indicator. In
                # this way, calendar events that occur closer to the time of the search query
                # are considered higher quality and ranked accordingly.
              "freshnessDuration": "A String", # The duration after which an object should be considered
                  # stale. The default value is 180 days (in seconds).
              "freshnessProperty": "A String", # 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 fresheness, the value defaults
                  # to 2 years from the current time.
            },
            "displayOptions": { # The display options for an object. # Options that determine how the object is displayed in the Cloud Search
                # results page.
              "metalines": [ # Defines the properties that will be displayed in the metalines of the
                  # search results. The property values will be displayed in the order given
                  # here. If a property holds multiple values, all of the values will be
                  # diplayed 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.
                  "properties": [ # The list of displayed properties for the metaline. The maxiumum 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 will be
                        # displayed in the search results along with the
                        # dislpay label
                        # for that property if one is specified. If a display label is not specified,
                        # only the values will be shown.
                      "propertyName": "A String", # 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 will be given when attempting to update the schema.
                    },
                  ],
                },
              ],
              "objectDisplayLabel": "A String", # The user friendly label to display in the search result to inidicate the
                  # type of the item. This is OPTIONAL; if not given, an object label will not
                  # be displayed on the context line of the search results. The maximum length
                  # is 32 characters.
            },
          },
        },
      ],
      "operationIds": [ # 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.
        "A String",
      ],
    },
  }

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

Returns:
  An object of the form:

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

</body></html>