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

<p class="toc_element">
  <code><a href="#search">search(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">The Cloud Search Query API provides the search method, which returns</p>
<p class="toc_element">
  <code><a href="#suggest">suggest(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Provides suggestions for autocompleting the query.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="search">search(body=None, x__xgafv=None)</code>
  <pre>The Cloud Search Query API provides the search method, which returns
the most relevant results from a user query.  The results can come from
G Suite Apps, such as Gmail or Google Drive, or they can come from data
that you have indexed from a third party.

**Note:** This API requires a standard end user account to execute.
A service account can&#x27;t perform Query API requests directly; to use a
service account to perform queries, set up [G Suite domain-wide delegation
of
authority](https://developers.google.com/cloud-search/docs/guides/delegation/).

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

{ # The search API request.
    &quot;requestOptions&quot;: { # Shared request options for all RPC methods. # Request options, such as the search application and user timezone.
      &quot;searchApplicationId&quot;: &quot;A String&quot;, # The ID generated when you create a search application using the
          # [admin console](https://support.google.com/a/answer/9043922).
      &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;.
          # For more information, see
          # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
          # For translations.
          #
          # Set this field using the language set in browser or for the page. In the
          # event that the user&#x27;s language preference is known, set this field to the
          # known user language.
          #
          # When specified, the documents in search results are biased towards the
          # specified language.
          #
          # The suggest API does not use this parameter. Instead, suggest autocompletes
          # only based on characters in the query.
      &quot;timeZone&quot;: &quot;A String&quot;, # Current user&#x27;s time zone id, such as &quot;America/Los_Angeles&quot; or
          # &quot;Australia/Sydney&quot;. These IDs are defined by
          # [Unicode Common Locale Data Repository (CLDR)](http://cldr.unicode.org/)
          # project, and currently available in the file
          # [timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml).
          # This field is used to correctly interpret date and time queries.
          # If this field is not specified, the default time zone (UTC) is used.
      &quot;debugOptions&quot;: { # Shared request debug options for all cloudsearch RPC methods. # Debug options of the request
        &quot;enableDebugging&quot;: True or False, # If you are asked by Google to help with debugging, set this field.
            # Otherwise, ignore this field.
      },
    },
    &quot;dataSourceRestrictions&quot;: [ # The sources to use for querying. If not specified, all data sources
        # from the current search application are used.
      { # Restriction on Datasource.
        &quot;filterOptions&quot;: [ # Filter options restricting the results. If multiple filters
            # are present, they are grouped by object type before joining.
            # Filters with the same object type are joined conjunctively, then
            # the resulting expressions are joined disjunctively.
            #
            # The maximum number of elements is 20.
            #
            # NOTE: Suggest API supports only few filters at the moment:
            #   &quot;objecttype&quot;, &quot;type&quot; and &quot;mimetype&quot;.
            # For now, schema specific filters cannot be used to filter suggestions.
          { # Filter options to be applied on query.
            &quot;filter&quot;: { # A generic way of expressing filters in a query, which supports two # Generic filter to restrict the search, such as `lang:en`, `site:xyz`.
                # approaches: &lt;br/&gt;&lt;br/&gt;
                # **1. Setting a ValueFilter.** The name must match an operator_name defined in
                # the schema for your data source.
                # &lt;br/&gt;
                # **2. Setting a CompositeFilter.** The filters are evaluated
                # using the logical operator. The top-level operators can only be either an AND
                # or a NOT. AND can appear only at the top-most level. OR can appear only under
                # a top-level AND.
              &quot;compositeFilter&quot;: {
                &quot;logicOperator&quot;: &quot;A String&quot;, # The logic operator of the sub filter.
                &quot;subFilters&quot;: [ # Sub filters.
                  # Object with schema name: Filter
                ],
              },
              &quot;valueFilter&quot;: {
                &quot;operatorName&quot;: &quot;A String&quot;, # The `operator_name` applied to the query, such as *price_greater_than*.
                    # The filter can work against both types of filters defined in the schema
                    # for your data source:
                    # &lt;br/&gt;&lt;br/&gt;
                    # 1. `operator_name`, where the query filters results by the property
                    # that matches the value.
                    # &lt;br/&gt;
                    # 2. `greater_than_operator_name` or `less_than_operator_name` in your
                    # schema. The query filters the results for the property values that are
                    # greater than or less than  the supplied value in the query.
                &quot;value&quot;: { # Definition of a single value with generic type. # The value to be compared with.
                  &quot;integerValue&quot;: &quot;A String&quot;,
                  &quot;stringValue&quot;: &quot;A String&quot;,
                  &quot;dateValue&quot;: { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                    &quot;month&quot;: 42, # Month of date. Must be from 1 to 12.
                    &quot;day&quot;: 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                    &quot;year&quot;: 42, # Year of date. Must be from 1 to 9999.
                  },
                  &quot;doubleValue&quot;: 3.14,
                  &quot;timestampValue&quot;: &quot;A String&quot;,
                  &quot;booleanValue&quot;: True or False,
                },
              },
            },
            &quot;objectType&quot;: &quot;A String&quot;, # If object_type is set, only objects of that type are returned. This should
                # correspond to the name of the object that was registered within the
                # definition of schema. The maximum length is 256 characters.
          },
        ],
        &quot;source&quot;: { # Defines sources for the suggest/search APIs. # The source of restriction.
          &quot;name&quot;: &quot;A String&quot;, # Source name for content indexed by the
              # Indexing API.
          &quot;predefinedSource&quot;: &quot;A String&quot;, # Predefined content source for Google Apps.
        },
      },
    ],
    &quot;sortOptions&quot;: { # The options for sorting the search results
      &quot;sortOrder&quot;: &quot;A String&quot;, # Ascending is the default sort order
      &quot;operatorName&quot;: &quot;A String&quot;, # Name of the operator corresponding to the field to sort on.
          # The corresponding property must be marked as
          # sortable.
    },
    &quot;facetOptions&quot;: [
      { # Specifies operators to return facet results for. There will be one
          # FacetResult for every source_name/object_type/operator_name combination.
        &quot;numFacetBuckets&quot;: 42, # Maximum number of facet buckets that should be returned for this facet.
            # Defaults to 10.
            # Maximum value is 100.
        &quot;sourceName&quot;: &quot;A String&quot;, # Source name to facet on. Format: datasources/{source_id}
            # If empty, all data sources will be used.
        &quot;operatorName&quot;: &quot;A String&quot;, # Name of the operator chosen for faceting. @see
            # cloudsearch.SchemaPropertyOptions
        &quot;objectType&quot;: &quot;A String&quot;, # If object_type is set, only those objects of that type will be used to
            # compute facets. If empty, then all objects will be used to compute facets.
      },
    ],
    &quot;pageSize&quot;: 42, # Maximum number of search results to return in one page.
        # Valid values are between 1 and 100, inclusive.
        # Default value is 10.
    &quot;query&quot;: &quot;A String&quot;, # The raw query string.
        # See supported search operators in the [Cloud search
        # Cheat
        # Sheet](https://gsuite.google.com/learning-center/products/cloudsearch/cheat-sheet/)
    &quot;start&quot;: 42, # Starting index of the results.
    &quot;queryInterpretationOptions&quot;: { # Options to interpret user query. # Options to interpret the user query.
      &quot;enableVerbatimMode&quot;: True or False, # Enable this flag to turn off all internal optimizations like natural
          # language (NL) interpretation of queries, supplemental result retrieval,
          # and usage of synonyms including custom ones.
          # Nl interpretation will be disabled if either one of the two flags is true.
      &quot;disableNlInterpretation&quot;: True or False, # Flag to disable natural language (NL) interpretation of queries. Default is
          # false, Set to true to disable natural language interpretation. NL
          # interpretation only applies to predefined datasources.
    },
  }

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

Returns:
  An object of the form:

    { # The search API response.
    &quot;results&quot;: [ # Results from a search query.
      { # Results containing indexed information for a document.
        &quot;debugInfo&quot;: { # Debugging information about the result. # Debugging information about this search result.
          &quot;formattedDebugInfo&quot;: &quot;A String&quot;, # General debug info formatted for display.
        },
        &quot;clusteredResults&quot;: [ # If source is clustered, provide list of clustered results. There will only
            # be one level of clustered results. If current source is not enabled for
            # clustering, this field will be empty.
          # Object with schema name: SearchResult
        ],
        &quot;url&quot;: &quot;A String&quot;, # The URL of the search result. The URL contains a Google redirect to the
            # actual item. This URL is signed and shouldn&#x27;t be changed.
        &quot;metadata&quot;: { # Metadata of a matched search result. # Metadata of the search result.
          &quot;displayOptions&quot;: { # Options that specify how to display a structured data search result.
            &quot;objectTypeLabel&quot;: &quot;A String&quot;, # The display label for the object.
            &quot;metalines&quot;: [ # The metalines content to be displayed with the result.
              { # The collection of fields that make up a displayed line
                &quot;fields&quot;: [
                  { # Display Fields for Search Results
                    &quot;operatorName&quot;: &quot;A String&quot;, # The operator name of the property.
                    &quot;label&quot;: &quot;A String&quot;, # The display label for the property.
                    &quot;property&quot;: { # A typed name-value pair for structured data.  The type of the value should # The name value pair for the property.
                        # be the same as the registered type for the `name` property in the object
                        # definition of `objectType`.
                      &quot;integerValues&quot;: { # List of integer values.
                        &quot;values&quot;: [
                          &quot;A String&quot;,
                        ],
                      },
                      &quot;name&quot;: &quot;A String&quot;, # The name of the property.  This name should correspond to the name of the
                          # property that was registered for object definition in the schema.
                          # The maximum allowable length for this property is 256 characters.
                      &quot;doubleValues&quot;: { # List of double values.
                        &quot;values&quot;: [
                          3.14,
                        ],
                      },
                      &quot;booleanValue&quot;: True or False,
                      &quot;htmlValues&quot;: { # List of html values.
                        &quot;values&quot;: [ # The maximum allowable length for html values is 2048 characters.
                          &quot;A String&quot;,
                        ],
                      },
                      &quot;textValues&quot;: { # List of text values.
                        &quot;values&quot;: [ # The maximum allowable length for text values is 2048 characters.
                          &quot;A String&quot;,
                        ],
                      },
                      &quot;timestampValues&quot;: { # List of timestamp values.
                        &quot;values&quot;: [
                          &quot;A String&quot;,
                        ],
                      },
                      &quot;objectValues&quot;: { # List of object values.
                        &quot;values&quot;: [
                          # Object with schema name: StructuredDataObject
                        ],
                      },
                      &quot;dateValues&quot;: { # List of date values.
                        &quot;values&quot;: [
                          { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                            &quot;month&quot;: 42, # Month of date. Must be from 1 to 12.
                            &quot;day&quot;: 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                            &quot;year&quot;: 42, # Year of date. Must be from 1 to 9999.
                          },
                        ],
                      },
                      &quot;enumValues&quot;: { # List of enum values.
                        &quot;values&quot;: [ # The maximum allowable length for string values is 32 characters.
                          &quot;A String&quot;,
                        ],
                      },
                    },
                  },
                ],
              },
            ],
          },
          &quot;source&quot;: { # Defines sources for the suggest/search APIs. # The named source for the result, such as Gmail.
            &quot;name&quot;: &quot;A String&quot;, # Source name for content indexed by the
                # Indexing API.
            &quot;predefinedSource&quot;: &quot;A String&quot;, # Predefined content source for Google Apps.
          },
          &quot;createTime&quot;: &quot;A String&quot;, # The creation time for this document or object in the search result.
          &quot;updateTime&quot;: &quot;A String&quot;, # The last modified date for the object in the search result. If not
              # set in the item, the value returned here is empty. When
              # `updateTime` is used for calculating freshness and is not set, this
              # value defaults to 2 years from the current time.
          &quot;fields&quot;: [ # Indexed fields in structured data, returned as a generic named property.
            { # A typed name-value pair for structured data.  The type of the value should
                # be the same as the registered type for the `name` property in the object
                # definition of `objectType`.
              &quot;integerValues&quot;: { # List of integer values.
                &quot;values&quot;: [
                  &quot;A String&quot;,
                ],
              },
              &quot;name&quot;: &quot;A String&quot;, # The name of the property.  This name should correspond to the name of the
                  # property that was registered for object definition in the schema.
                  # The maximum allowable length for this property is 256 characters.
              &quot;doubleValues&quot;: { # List of double values.
                &quot;values&quot;: [
                  3.14,
                ],
              },
              &quot;booleanValue&quot;: True or False,
              &quot;htmlValues&quot;: { # List of html values.
                &quot;values&quot;: [ # The maximum allowable length for html values is 2048 characters.
                  &quot;A String&quot;,
                ],
              },
              &quot;textValues&quot;: { # List of text values.
                &quot;values&quot;: [ # The maximum allowable length for text values is 2048 characters.
                  &quot;A String&quot;,
                ],
              },
              &quot;timestampValues&quot;: { # List of timestamp values.
                &quot;values&quot;: [
                  &quot;A String&quot;,
                ],
              },
              &quot;objectValues&quot;: { # List of object values.
                &quot;values&quot;: [
                  # Object with schema name: StructuredDataObject
                ],
              },
              &quot;dateValues&quot;: { # List of date values.
                &quot;values&quot;: [
                  { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                    &quot;month&quot;: 42, # Month of date. Must be from 1 to 12.
                    &quot;day&quot;: 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                    &quot;year&quot;: 42, # Year of date. Must be from 1 to 9999.
                  },
                ],
              },
              &quot;enumValues&quot;: { # List of enum values.
                &quot;values&quot;: [ # The maximum allowable length for string values is 32 characters.
                  &quot;A String&quot;,
                ],
              },
            },
          ],
          &quot;owner&quot;: { # Object to represent a person. # Owner (usually creator) of the document or object of the search result.
            &quot;obfuscatedId&quot;: &quot;A String&quot;, # Obfuscated ID of a person.
            &quot;photos&quot;: [ # A person&#x27;s read-only photo. A picture shown next to the person&#x27;s name to
                # help others recognize the person in search results.
              { # A person&#x27;s photo.
                &quot;url&quot;: &quot;A String&quot;, # The URL of the photo.
              },
            ],
            &quot;emailAddresses&quot;: [ # The person&#x27;s email addresses
              { # A person&#x27;s email address.
                &quot;emailAddress&quot;: &quot;A String&quot;, # The email address.
              },
            ],
            &quot;personNames&quot;: [ # The person&#x27;s name
              { # A person&#x27;s name.
                &quot;displayName&quot;: &quot;A String&quot;, # The read-only display name formatted according to the locale specified by
                    # the viewer&#x27;s account or the &lt;code&gt;Accept-Language&lt;/code&gt; HTTP header.
              },
            ],
            &quot;name&quot;: &quot;A String&quot;, # The resource name of the person to provide information about.
                # See &lt;a href=&quot;https://developers.google.com/people/api/rest/v1/people/get&quot;&gt;
                # People.get&lt;/a&gt; from Google People API.
          },
          &quot;mimeType&quot;: &quot;A String&quot;, # Mime type of the search result.
          &quot;objectType&quot;: &quot;A String&quot;, # Object type of the search result.
        },
        &quot;snippet&quot;: { # Snippet of the search result, which summarizes the content of the resulting # The concatenation of all snippets (summaries) available for this result.
            # page.
          &quot;snippet&quot;: &quot;A String&quot;, # The snippet of the document.
              # The snippet of the document. May contain escaped HTML character that
              # should be unescaped prior to rendering.
          &quot;matchRanges&quot;: [ # The matched ranges in the snippet.
            { # Matched range of a snippet [start, end).
              &quot;end&quot;: 42, # End of the match in the snippet.
              &quot;start&quot;: 42, # Starting position of the match in the snippet.
            },
          ],
        },
        &quot;title&quot;: &quot;A String&quot;, # Title of the search result.
      },
    ],
    &quot;debugInfo&quot;: { # Debugging information about the response. # Debugging information about the response.
      &quot;formattedDebugInfo&quot;: &quot;A String&quot;, # General debug info formatted for display.
    },
    &quot;resultCountEstimate&quot;: &quot;A String&quot;, # The estimated result count for this query.
    &quot;resultCounts&quot;: { # Result count information # Expanded result count information.
      &quot;sourceResultCounts&quot;: [ # Result count information for each source with results.
        { # Per source result count information.
          &quot;resultCountEstimate&quot;: &quot;A String&quot;, # The estimated result count for this source.
          &quot;hasMoreResults&quot;: True or False, # Whether there are more search results for this source.
          &quot;source&quot;: { # Defines sources for the suggest/search APIs. # The source the result count information is associated with.
            &quot;name&quot;: &quot;A String&quot;, # Source name for content indexed by the
                # Indexing API.
            &quot;predefinedSource&quot;: &quot;A String&quot;, # Predefined content source for Google Apps.
          },
          &quot;resultCountExact&quot;: &quot;A String&quot;, # The exact result count for this source.
        },
      ],
    },
    &quot;facetResults&quot;: [ # Repeated facet results.
      { # Source specific facet response
        &quot;buckets&quot;: [ # FacetBuckets for values in response containing at least a single result.
          { # A bucket in a facet is the basic unit of operation. A bucket can comprise
              # either a single value OR a contiguous range of values, depending on the
              # type of the field bucketed.
              # FacetBucket is currently used only for returning the response object.
            &quot;count&quot;: 42, # Number of results that match the bucket value. Counts are only returned
                # for searches when count accuracy is ensured. Can be empty.
            &quot;percentage&quot;: 42, # Percent of results that match the bucket value. The returned value is
                # between (0-100], and is rounded down to an integer if fractional. If the
                # value is not explicitly returned, it represents a percentage value that
                # rounds to 0. Percentages are returned for all searches, but are an
                # estimate. Because percentages are always returned, you should render
                # percentages instead of counts.
            &quot;value&quot;: { # Definition of a single value with generic type.
              &quot;integerValue&quot;: &quot;A String&quot;,
              &quot;stringValue&quot;: &quot;A String&quot;,
              &quot;dateValue&quot;: { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                &quot;month&quot;: 42, # Month of date. Must be from 1 to 12.
                &quot;day&quot;: 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                &quot;year&quot;: 42, # Year of date. Must be from 1 to 9999.
              },
              &quot;doubleValue&quot;: 3.14,
              &quot;timestampValue&quot;: &quot;A String&quot;,
              &quot;booleanValue&quot;: True or False,
            },
          },
        ],
        &quot;sourceName&quot;: &quot;A String&quot;, # Source name for which facet results are returned. Will not be empty.
        &quot;operatorName&quot;: &quot;A String&quot;, # Name of the operator chosen for faceting. @see
            # cloudsearch.SchemaPropertyOptions
        &quot;objectType&quot;: &quot;A String&quot;, # Object type for which facet results are returned. Can be empty.
      },
    ],
    &quot;structuredResults&quot;: [ # Structured results for the user query. These results are not counted
        # against the page_size.
      { # Structured results that are returned as part of search request.
        &quot;person&quot;: { # Object to represent a person. # Representation of a person
          &quot;obfuscatedId&quot;: &quot;A String&quot;, # Obfuscated ID of a person.
          &quot;photos&quot;: [ # A person&#x27;s read-only photo. A picture shown next to the person&#x27;s name to
              # help others recognize the person in search results.
            { # A person&#x27;s photo.
              &quot;url&quot;: &quot;A String&quot;, # The URL of the photo.
            },
          ],
          &quot;emailAddresses&quot;: [ # The person&#x27;s email addresses
            { # A person&#x27;s email address.
              &quot;emailAddress&quot;: &quot;A String&quot;, # The email address.
            },
          ],
          &quot;personNames&quot;: [ # The person&#x27;s name
            { # A person&#x27;s name.
              &quot;displayName&quot;: &quot;A String&quot;, # The read-only display name formatted according to the locale specified by
                  # the viewer&#x27;s account or the &lt;code&gt;Accept-Language&lt;/code&gt; HTTP header.
            },
          ],
          &quot;name&quot;: &quot;A String&quot;, # The resource name of the person to provide information about.
              # See &lt;a href=&quot;https://developers.google.com/people/api/rest/v1/people/get&quot;&gt;
              # People.get&lt;/a&gt; from Google People API.
        },
      },
    ],
    &quot;spellResults&quot;: [ # Suggested spelling for the query.
      {
        &quot;suggestedQuery&quot;: &quot;A String&quot;, # The suggested spelling of the query.
      },
    ],
    &quot;resultCountExact&quot;: &quot;A String&quot;, # The exact result count for this query.
    &quot;errorInfo&quot;: { # Error information about the response. # Error information about the response.
      &quot;errorMessages&quot;: [
        { # Error message per source response.
          &quot;errorMessage&quot;: &quot;A String&quot;,
          &quot;source&quot;: { # Defines sources for the suggest/search APIs.
            &quot;name&quot;: &quot;A String&quot;, # Source name for content indexed by the
                # Indexing API.
            &quot;predefinedSource&quot;: &quot;A String&quot;, # Predefined content source for Google Apps.
          },
        },
      ],
    },
    &quot;hasMoreResults&quot;: True or False, # Whether there are more search results matching the query.
    &quot;queryInterpretation&quot;: { # Query interpretation result for user query. Empty if query interpretation
        # is disabled.
      &quot;interpretationType&quot;: &quot;A String&quot;,
      &quot;reason&quot;: &quot;A String&quot;, # The reason for interpretation of the query. This field will not be
          # UNSPECIFIED if the interpretation type is not NONE.
      &quot;interpretedQuery&quot;: &quot;A String&quot;, # The interpretation of the query used in search. For example, queries with
          # natural language intent like &quot;email from john&quot; will be interpreted as
          # &quot;from:john source:mail&quot;. This field will not be filled when the reason is
          # NOT_ENOUGH_RESULTS_FOUND_FOR_USER_QUERY.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="suggest">suggest(body=None, x__xgafv=None)</code>
  <pre>Provides suggestions for autocompleting the query.

**Note:** This API requires a standard end user account to execute.
A service account can&#x27;t perform Query API requests directly; to use a
service account to perform queries, set up [G Suite domain-wide delegation
of
authority](https://developers.google.com/cloud-search/docs/guides/delegation/).

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

{ # Request of suggest API.
    &quot;query&quot;: &quot;A String&quot;, # Partial query for which autocomplete suggestions will be shown.
        # For example, if the query is &quot;sea&quot;, then the server might return
        # &quot;season&quot;, &quot;search&quot;, &quot;seagull&quot; and so on.
    &quot;requestOptions&quot;: { # Shared request options for all RPC methods. # Request options, such as the search application and user timezone.
      &quot;searchApplicationId&quot;: &quot;A String&quot;, # The ID generated when you create a search application using the
          # [admin console](https://support.google.com/a/answer/9043922).
      &quot;languageCode&quot;: &quot;A String&quot;, # The BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;.
          # For more information, see
          # http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
          # For translations.
          #
          # Set this field using the language set in browser or for the page. In the
          # event that the user&#x27;s language preference is known, set this field to the
          # known user language.
          #
          # When specified, the documents in search results are biased towards the
          # specified language.
          #
          # The suggest API does not use this parameter. Instead, suggest autocompletes
          # only based on characters in the query.
      &quot;timeZone&quot;: &quot;A String&quot;, # Current user&#x27;s time zone id, such as &quot;America/Los_Angeles&quot; or
          # &quot;Australia/Sydney&quot;. These IDs are defined by
          # [Unicode Common Locale Data Repository (CLDR)](http://cldr.unicode.org/)
          # project, and currently available in the file
          # [timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml).
          # This field is used to correctly interpret date and time queries.
          # If this field is not specified, the default time zone (UTC) is used.
      &quot;debugOptions&quot;: { # Shared request debug options for all cloudsearch RPC methods. # Debug options of the request
        &quot;enableDebugging&quot;: True or False, # If you are asked by Google to help with debugging, set this field.
            # Otherwise, ignore this field.
      },
    },
    &quot;dataSourceRestrictions&quot;: [ # The sources to use for suggestions. If not specified, the data sources
        # are taken from the current search application.
        # 
        # NOTE: Suggestions are supported only for third party data sources and
        # people (i.e. PredefinedSource.PERSON).
      { # Restriction on Datasource.
        &quot;filterOptions&quot;: [ # Filter options restricting the results. If multiple filters
            # are present, they are grouped by object type before joining.
            # Filters with the same object type are joined conjunctively, then
            # the resulting expressions are joined disjunctively.
            #
            # The maximum number of elements is 20.
            #
            # NOTE: Suggest API supports only few filters at the moment:
            #   &quot;objecttype&quot;, &quot;type&quot; and &quot;mimetype&quot;.
            # For now, schema specific filters cannot be used to filter suggestions.
          { # Filter options to be applied on query.
            &quot;filter&quot;: { # A generic way of expressing filters in a query, which supports two # Generic filter to restrict the search, such as `lang:en`, `site:xyz`.
                # approaches: &lt;br/&gt;&lt;br/&gt;
                # **1. Setting a ValueFilter.** The name must match an operator_name defined in
                # the schema for your data source.
                # &lt;br/&gt;
                # **2. Setting a CompositeFilter.** The filters are evaluated
                # using the logical operator. The top-level operators can only be either an AND
                # or a NOT. AND can appear only at the top-most level. OR can appear only under
                # a top-level AND.
              &quot;compositeFilter&quot;: {
                &quot;logicOperator&quot;: &quot;A String&quot;, # The logic operator of the sub filter.
                &quot;subFilters&quot;: [ # Sub filters.
                  # Object with schema name: Filter
                ],
              },
              &quot;valueFilter&quot;: {
                &quot;operatorName&quot;: &quot;A String&quot;, # The `operator_name` applied to the query, such as *price_greater_than*.
                    # The filter can work against both types of filters defined in the schema
                    # for your data source:
                    # &lt;br/&gt;&lt;br/&gt;
                    # 1. `operator_name`, where the query filters results by the property
                    # that matches the value.
                    # &lt;br/&gt;
                    # 2. `greater_than_operator_name` or `less_than_operator_name` in your
                    # schema. The query filters the results for the property values that are
                    # greater than or less than  the supplied value in the query.
                &quot;value&quot;: { # Definition of a single value with generic type. # The value to be compared with.
                  &quot;integerValue&quot;: &quot;A String&quot;,
                  &quot;stringValue&quot;: &quot;A String&quot;,
                  &quot;dateValue&quot;: { # Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.
                    &quot;month&quot;: 42, # Month of date. Must be from 1 to 12.
                    &quot;day&quot;: 42, # Day of month. Must be from 1 to 31 and valid for the year and month.
                    &quot;year&quot;: 42, # Year of date. Must be from 1 to 9999.
                  },
                  &quot;doubleValue&quot;: 3.14,
                  &quot;timestampValue&quot;: &quot;A String&quot;,
                  &quot;booleanValue&quot;: True or False,
                },
              },
            },
            &quot;objectType&quot;: &quot;A String&quot;, # If object_type is set, only objects of that type are returned. This should
                # correspond to the name of the object that was registered within the
                # definition of schema. The maximum length is 256 characters.
          },
        ],
        &quot;source&quot;: { # Defines sources for the suggest/search APIs. # The source of restriction.
          &quot;name&quot;: &quot;A String&quot;, # Source name for content indexed by the
              # Indexing API.
          &quot;predefinedSource&quot;: &quot;A String&quot;, # Predefined content source for Google Apps.
        },
      },
    ],
  }

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

Returns:
  An object of the form:

    { # Response of the suggest API.
    &quot;suggestResults&quot;: [ # List of suggestions.
      { # One suggestion result.
        &quot;querySuggestion&quot;: { # This field does not contain anything as of now and is just used as an # This field will be present if the suggested query is a word/phrase
            # completion.
            # indicator that the suggest result was a phrase completion.
        },
        &quot;source&quot;: { # Defines sources for the suggest/search APIs. # The source of the suggestion.
          &quot;name&quot;: &quot;A String&quot;, # Source name for content indexed by the
              # Indexing API.
          &quot;predefinedSource&quot;: &quot;A String&quot;, # Predefined content source for Google Apps.
        },
        &quot;suggestedQuery&quot;: &quot;A String&quot;, # The suggested query that will be used for search, when the user
            # clicks on the suggestion
        &quot;peopleSuggestion&quot;: { # This field contains information about the person being suggested. # This is present when the suggestion indicates a person. It
            # contains more information about the person - like their email ID,
            # name etc.
          &quot;person&quot;: { # Object to represent a person. # Suggested person. All fields of the person object might not be populated.
            &quot;obfuscatedId&quot;: &quot;A String&quot;, # Obfuscated ID of a person.
            &quot;photos&quot;: [ # A person&#x27;s read-only photo. A picture shown next to the person&#x27;s name to
                # help others recognize the person in search results.
              { # A person&#x27;s photo.
                &quot;url&quot;: &quot;A String&quot;, # The URL of the photo.
              },
            ],
            &quot;emailAddresses&quot;: [ # The person&#x27;s email addresses
              { # A person&#x27;s email address.
                &quot;emailAddress&quot;: &quot;A String&quot;, # The email address.
              },
            ],
            &quot;personNames&quot;: [ # The person&#x27;s name
              { # A person&#x27;s name.
                &quot;displayName&quot;: &quot;A String&quot;, # The read-only display name formatted according to the locale specified by
                    # the viewer&#x27;s account or the &lt;code&gt;Accept-Language&lt;/code&gt; HTTP header.
              },
            ],
            &quot;name&quot;: &quot;A String&quot;, # The resource name of the person to provide information about.
                # See &lt;a href=&quot;https://developers.google.com/people/api/rest/v1/people/get&quot;&gt;
                # People.get&lt;/a&gt; from Google People API.
          },
        },
      },
    ],
  }</pre>
</div>

</body></html>