我正在寻找可以发出异步请求的ElasticSearch Python客户端。例如,我想写这段代码,
query1_future = es.search('/foobar', query1_json)
query2_future = es.search('/baz', query2_json) # Submit query 2 right after query 1, don't wait for its response
query1 = query1_future.get()
query2 = query2_future.get()
但是,我没有看到任何支持此功能的客户端(PyES或official client)。此外,我熟悉的两个请求逻辑与响应处理逻辑耦合,因此自己修改它们似乎很困难。也许足够的临时解决方案是使用异步版本的请求grequests?
此外,值得指出的是ElasticSearch的{{1}}可能是性能更好的选项,但对于实际应用程序,它需要进行一些代码重组。
答案 0 :(得分:5)
刚刚遇到这个问题。有一个基于asyncio的官方异步Elasticsearch客户端:
答案 1 :(得分:4)
您还可以考虑以下选项来执行I / O而不使用现有客户端阻止主执行过程:
Gevent的使用是最轻量级的(用于RAM / CPU资源)并允许处理最密集的I / O,但它也是列出的解决方案中最复杂的。另请注意,它可以在单个进程中使用,并且可以使用多个核multiprocessing包的优势。
答案 2 :(得分:2)
答案 3 :(得分:1)
答案 4 :(得分:0)
我还没用过它,但我发现了这个:
答案 5 :(得分:0)
Twistes是一个很好的库
答案 6 :(得分:0)
这是一个比较老的问题,但是现在在2019年,有正式的异步包装程序包。 https://github.com/elastic/elasticsearch-py-async
我在针对ES 5.x的使用上取得了成功,但是问题是5.x分支没有得到维护https://github.com/elastic/elasticsearch-py-async/issues/46
答案 7 :(得分:-1)
我的建议是坚持使用CURLing。有许多不同的方法,过滤器和查询,各种“包装器”很难重新创建所有功能。在我看来,它类似于使用ORM进行数据库...你在易用性方面获得的东西会失去灵活性/原始力量。
暂时尝试一下CURL,看看它对你有何看法。您可以使用外部JSON格式化程序检查您的JSON,邮件列表以查找示例,如果您使用JSON,文档也可以。