首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python的弹性搜索导入错误

使用python的弹性搜索导入错误
EN

Stack Overflow用户
提问于 2017-05-19 10:31:54
回答 3查看 100关注 0票数 0

以下是json变量

代码语言:javascript
复制
jsonout = [{"city": "Springfield", "id": 1, "name": "Moes Tavern"}, {"city": "Springfield", "id": 2, "name": "Springfield Power Plant"}, {"city": "Fountain Lakes", "id": 3, "name": "Kath and Kim Pty Ltd"}]

下面的命令用于导入json变量

代码语言:javascript
复制
es.bulk((es.index_op(doc, id=doc('id')) for doc in jsonout), index='dbmysql', doc_type='person')

以下是错误

代码语言:javascript
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-14-10faf5c5bb89> in <module>()
      1 docs = [{'id': 2, 'name': 'Jessica Coder', 'age': 32, 'title': 'Programmer'}, {'id': 3, 'name': 'Freddy Tester', 'age': 29, 'title': 'Office Assistant'}]
----> 2 es.bulk((es.index_op(doc, id=doc('id')) for doc in jsonout), index='dbmysql', doc_type='person')

d:\nvk\USER\Anaconda2\lib\site-packages\pyelasticsearch\client.pyc in decorate(*args, **kwargs)
     91                 elif k in convertible_args:
     92                     query_params[k] = kwargs.pop(k)
---> 93             return func(*args, query_params=query_params, **kwargs)
     94         return decorate
     95     return decorator

d:\nvk\USER\Anaconda2\lib\site-packages\pyelasticsearch\client.pyc in bulk(self, actions, index, doc_type, query_params)
    445         response = self.send_request('POST',
    446                                      [index, doc_type, '_bulk'],
--> 447                                      body='\n'.join(actions) + '\n',
    448                                      query_params=query_params)
    449 

<ipython-input-14-10faf5c5bb89> in <genexpr>((doc,))
      1 docs = [{'id': 2, 'name': 'Jessica Coder', 'age': 32, 'title': 'Programmer'}, {'id': 3, 'name': 'Freddy Tester', 'age': 29, 'title': 'Office Assistant'}]
----> 2 es.bulk((es.index_op(doc, id=doc('id')) for doc in jsonout), index='dbmysql', doc_type='person')

TypeError: 'str' object is not callable
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-24 11:59:25

终于找到了解决办法。

我们可以使用json.loads将str对象转换为json对象。

json.loads(jsonout)

票数 0
EN

Stack Overflow用户

发布于 2017-05-19 10:35:44

doc很可能是不可调用的字符串。通常,jsonout听起来不像应该有函数。

票数 0
EN

Stack Overflow用户

发布于 2017-05-19 14:51:23

您在问题中遗漏了一些东西--在错误示例中,您有以下代码:

代码语言:javascript
复制
1 docs = [{'id': 2, 'name': 'Jessica Coder', ...}, {...}]
2 es.bulk((es.index_op(doc, id=doc('id')) for doc in jsonout), index='dbmysql', doc_type='person')

在第1行中有docs变量,在第2行中有jsonout,如果将docs变量而不是jsonout放入第二行,您应该会得到一个类似于'dict' object is not callable的错误,因为您有doc('id') (而不是doc['id']),doc是一本字典。

因此,我怀疑实际的jsonout变量值也有问题--它可能是一个字符串列表,而不是字典列表。

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

https://stackoverflow.com/questions/44067741

复制
相关文章

相似问题

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