首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用elasticsearch-py库的ElasticSearch ConnectionPool

使用elasticsearch-py库的ElasticSearch ConnectionPool
EN

Stack Overflow用户
提问于 2016-02-12 11:35:22
回答 1查看 3.3K关注 0票数 0

我是ElasticSearch的新手,尝试通过ElasticSearch ConnectionPool通过Transport class将条目添加到ElasticSearch中的索引中,使用来自ElasticSearch ConnectionPool的并发连接。

这是我的代码:

代码语言:javascript
复制
import elasticsearch
from elasticsearch.transport import Transport

def init_connection():
    transport = Transport([{'host':SERVER_URL}], port=SERVER_PORT, randomize_hosts=False)
    transport.add_connection(host=SERVER_URL+SERVER_PORT)
    return transport

def add_entries_to_es(id, name):
    transport = init_connection()
    doc = {
           'name': name,
           'postDate': datetime.datetime.now(),
           'valid': "true",
           'suggest': {
               "input": name,
               'output': name,
               'payload': {'domain_id': id}
               }
           }
    conn = transport.getConnection()
    es = elasticsearch.Elasticsearch(connection_class=conn)
    res = es.index(index=ES_INDEX_NAME, doc_type=ES_DOC_TYPE, id=id, body=doc)
    ...

我得到以下错误:

代码语言:javascript
复制
File "/my_project/elastichelper.py", line 23, in init_connection
transport.add_connection(host=SERVER_URL+SERVER_PORT)
File "/Library/Python/2.7/site-packages/elasticsearch/transport.py", line 139, in add_connection
self.set_connections(self.hosts)
File "/Library/Python/2.7/site-packages/elasticsearch/transport.py", line 169, in set_connections
connections = map(_create_connection, hosts)
File "/Library/Python/2.7/site-packages/elasticsearch/transport.py", line 161, in _create_connection
kwargs.update(host)
ValueError: dictionary update sequence element #0 has length 1; 2 is required

我不确定Transport class是否是在ElasticSearch中实例化ConnectionPool的正确方法。但是,我从文档中看到,运输类处理单个连接的实例化,以及创建一个连接池来保存它们。

我没有找到正确的方法来实例化ConnectionPool并有效地使用池中的连接。阅读和谷歌搜索对我没有任何帮助。

我也知道helpers.bulk() API,但我对使用它感到困惑,因为在向索引中添加条目的同时,我也要删除无效条目。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-14 09:04:59

我发现,只要使用为我设置了适当的ElasticSearch值的timeout类实例,timeout=30就足以满足index方法的工作需要。如下所示:

代码语言:javascript
复制
doc = {
       'name': name,
       'postDate': datetime.datetime.now(),
       'valid': "true",
       'suggest': {
           "input": name,
           'output': name,
           'payload': {'domain_id': id}
           }
       }
es = elasticsearch.Elasticsearch()
res = es.index(index=ES_INDEX_NAME, doc_type=ES_DOC_TYPE, id=id, body=doc, timeout=30)

我最初使用简单的timeout类实例来解决ElasticSearch问题,这是由上面的更改所修正的。

我根本不需要显式地使用TransportConnection类实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35361608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档