-
Notifications
You must be signed in to change notification settings - Fork 800
async support #1714
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
async support #1714
Changes from all commits
Commits
Show all changes
27 commits
Select commit
Hold shift + click to select a range
05ebfa5
async support (work in progress)
miguelgrinberg 74eccd7
minor refactoring, fixed linter and docs
miguelgrinberg 8fcf16c
validate _sync directory during lint phase
miguelgrinberg 78a4f72
search unit tests
miguelgrinberg 5f9eb27
async support for Document class
miguelgrinberg db05fc2
search integration tests
miguelgrinberg 85a1f41
document tests
miguelgrinberg a0fb061
async support for Index class
miguelgrinberg a3fa07d
document integration tests
miguelgrinberg 326f965
remove unused mock dependency
miguelgrinberg 90c8eb5
unasync support for update_by_query
miguelgrinberg 071ddea
remove star imports
miguelgrinberg eca6306
unasync support for mapping.py
miguelgrinberg 73ffe5a
unasync index integration tests
miguelgrinberg 3690105
unasync faceted search
miguelgrinberg 0184a77
review imports for consistency
miguelgrinberg 8add69f
async support for analyzer
miguelgrinberg 4b7e9fb
async examples
miguelgrinberg 38cd862
examples integration tests
miguelgrinberg 7386dd5
restore sync examples unasynced by mistake
miguelgrinberg 8b5fa41
Documentation updates
miguelgrinberg 2468e8a
Review feedback
miguelgrinberg d06d804
more review feedback
miguelgrinberg 7bdf7dc
another batch of review updates
miguelgrinberg 9c8e63d
documentation reorg
miguelgrinberg c172281
more documentation improvements
miguelgrinberg 6b56fb3
unasyncing of examples
miguelgrinberg File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
.. _async_api: | ||
|
||
Asynchronous API Documentation | ||
============================== | ||
|
||
Below please find the documentation for the asychronous classes of ``elasticsearch_dsl``. | ||
|
||
.. py:module:: elasticsearch_dsl | ||
:no-index: | ||
|
||
.. autoclass:: AsyncSearch | ||
:inherited-members: | ||
:members: | ||
|
||
.. autoclass:: AsyncMultiSearch | ||
:inherited-members: | ||
:members: | ||
|
||
.. autoclass:: AsyncDocument | ||
:inherited-members: | ||
:members: | ||
|
||
.. autoclass:: AsyncIndex | ||
:inherited-members: | ||
:members: | ||
|
||
.. autoclass:: AsyncFacetedSearch | ||
:inherited-members: | ||
:members: | ||
|
||
.. autoclass:: AsyncUpdateByQuery | ||
:inherited-members: | ||
:members: |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
.. _asyncio: | ||
|
||
Using asyncio with Elasticsearch DSL | ||
==================================== | ||
|
||
The ``elasticsearch-dsl`` package supports async/await with `asyncio <https://docs.python.org/3/library/asyncio.html>`__. | ||
To ensure that you have all the required dependencies, install the ``[async]`` extra: | ||
|
||
.. code:: bash | ||
|
||
$ python -m pip install elasticsearch-dsl[async] | ||
|
||
Connections | ||
----------- | ||
|
||
Use the ``async_connections`` module to manage your asynchronous connections. | ||
|
||
.. code:: python | ||
|
||
from elasticsearch_dsl import async_connections | ||
|
||
async_connections.create_connection(hosts=['localhost'], timeout=20) | ||
|
||
All the options available in the ``connections`` module can be used with ``async_connections``. | ||
|
||
How to avoid 'Unclosed client session / connector' warnings on exit | ||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
|
||
These warnings come from the ``aiohttp`` package, which is used internally by the | ||
``AsyncElasticsearch`` client. They appear often when the application exits and | ||
are caused by HTTP connections that are open when they are garbage collected. To | ||
avoid these warnings, make sure that you close your connections. | ||
|
||
.. code:: python | ||
|
||
es = async_connections.get_connection() | ||
await es.close() | ||
|
||
Search DSL | ||
---------- | ||
|
||
Use the ``AsyncSearch`` class to perform asynchronous searches. | ||
|
||
.. code:: python | ||
|
||
from elasticsearch_dsl import AsyncSearch | ||
|
||
s = AsyncSearch().query("match", title="python") | ||
async for hit in s: | ||
print(hit.title) | ||
|
||
Instead of using the ``AsyncSearch`` object as an asynchronous iterator, you can | ||
explicitly call the ``execute()`` method to get a ``Response`` object. | ||
|
||
.. code:: python | ||
|
||
s = AsyncSearch().query("match", title="python") | ||
response = await s.execute() | ||
for hit in response: | ||
print(hit.title) | ||
|
||
An ``AsyncMultiSearch`` is available as well. | ||
|
||
.. code:: python | ||
|
||
from elasticsearch_dsl import AsyncMultiSearch | ||
|
||
ms = AsyncMultiSearch(index='blogs') | ||
|
||
ms = ms.add(AsyncSearch().filter('term', tags='python')) | ||
ms = ms.add(AsyncSearch().filter('term', tags='elasticsearch')) | ||
|
||
responses = await ms.execute() | ||
|
||
for response in responses: | ||
print("Results for query %r." % response.search.query) | ||
for hit in response: | ||
print(hit.title) | ||
|
||
Asynchronous Documents, Indexes, and more | ||
----------------------------------------- | ||
|
||
The ``Document``, ``Index``, ``IndexTemplate``, ``Mapping``, ``UpdateByQuery`` and | ||
``FacetedSearch`` classes all have asynchronous versions that use the same name | ||
with an ``Async`` prefix. These classes expose the same interfaces as the | ||
synchronous versions, but any methods that perform I/O are defined as coroutines. | ||
|
||
Auxiliary classes that do not perform I/O do not have asynchronous versions. The | ||
same classes can be used in synchronous and asynchronous applications. | ||
|
||
When using a :ref:`custom analyzer <Analysis>` in an asynchronous application, use | ||
the ``async_simulate()`` method to invoke the Analyze API on it. | ||
|
||
Consult the :ref:`api` section for details about each specific method. |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.