Class `Query` represents a request on the search service to query the index.

`Query` is defined in the `google.appengine.api.search` module.

## Introduction

The `Query` class allows you to specify a query string and other options, such as sort
order, limit, and a cursor, for a search on an index. You set these options by instantiating the
`https://docs.cloud.google.com/appengine/docs/standard/services/search/python/queryoptionsclass` class to the
`Query.options` parameter.

For example, the following code fragment requests a search for documents where `first`
occurs in subject and `good` occurs anywhere, returning at most 20 documents, returning
a single document cursor for the results, sorting by subject in descending order, returning the
author, subject, and summary fields as well as a snippeted field content.

```python
from google.appengine.api import search

...
results = index.search(search.Query(
    # Specify the query string using the Search API's https://docs.cloud.google.com/appengine/docs/standard/services/search/query-strings.
    query_string='subject:first good',
    options=search.QueryOptions(
        limit=20,
        cursor=search.Cursor(),
        sort_options=search.SortOptions(
            expressions=[
                search.SortExpression(expression='subject', default_value='')],
            limit=1000),
        returned_fields=['author', 'subject', 'summary'],
        snippeted_fields=['content'])))
...
```

You have the option to return a cursor with each set of search results. This cursor allows you to
more easily page through search results. To get a Cursor, specify it in
`https://docs.cloud.google.com/appengine/docs/standard/services/search/python/queryoptionsclass` and extract the cursor for
the next request from `https://docs.cloud.google.com/appengine/docs/standard/services/search/python/searchresultsclass`.
This allows you to continue your search from the last found document, as shown below:

```python
...
results = index.search(
    search.Query(query_string='subject:first good',
          options=search.QueryOptions(cursor=results.cursor)))
```

## Constructor

The constructor for class `Query` is defined as follows:


class Query(query_string, options=None, enable_facet_discovery=False, return_facets=None, facet_options=None, facet_refinements=None)

:

    Request the search service to query an index, specifying parameters for that query.

    <br />

:

    Arguments

    query_string

    :   The query to match against documents in the index. A query is a boolean expression containing terms. For example, the query `job tag:"very important" sent < 2011-02-28 ` finds documents with the term `job` in any field, and also contain the phrase `very important` in a `tag` field, and a `sent` date prior to February 28, 2011.

    options

    :   Instantiation of the `https://docs.cloud.google.com/appengine/docs/standard/services/search/python/queryoptionsclass` class with instructions for post-processing search results.

    enable_facet_discovery

    :   Enable the discovery of the most relevant facets used by the documents that satisfy this search query
        and return them.

    return_facets

    :   An iterable of FacetRequest or basestring as facet name to
        return specific facet with the result.

    facet_options

    :   A FacetOption describing processing of facets.

    facet_refinements

    :   An iterable of FacetRefinement objects or refinement
        token strings used to filter out search results based on a facet value.
        refinements for different facets will be conjunction and refinements for
        the same facet will be disjunction.

    Result value

    :   A new instance of class `Query`.

    Exceptions

    TypeError

    :   Raised when `query_string` is not a string or `options` is not a `QueryOptions` object.

    ValueError

    :   Raised when the `query_string` could not be parsed.

    ## Properties

    An instance of class `Query` has the following properties:

    query_string

    :   Returns the query string to search in this request.

    options

    :   Returns the `https://docs.cloud.google.com/appengine/docs/standard/services/search/python/queryoptionsclass` defining post-processing of the search results.