用Python解析Elasticsearch的json输出。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Python解析Elasticsearch的json输出。相关的知识,希望对你有一定的参考价值。
我正在解析来自Elasticsearch索引的数据,并收到了如下的json格式的数据。
{
"_shards": {
"failed": 0,
"skipped": 0,
"successful": 5,
"total": 5
},
"hits": {
"hits": [
{
"_id": "wAv4u2cB9qH5eo0Slo9O",
"_index": "homesecmum",
"_score": 1.0870113,
"_source": {
"image": "0000000028037c08_1544283640.314629.jpg"
},
"_type": "dataRecord"
},
{
"_id": "wwv4u2cB9qH5eo0SmY8e",
"_index": "homesecmum",
"_score": 1.0870113,
"_source": {
"image": "0000000028037c08_1544283642.963721.jpg"
},
"_type": "dataRecord"
},
{
"_id": "wgv4u2cB9qH5eo0SmI8Z",
"_index": "homesecmum",
"_score": 1.074108,
"_source": {
"image": "0000000028037c08_1544283640.629583.jpg"
},
"_type": "dataRecord"
}
],
"max_score": 1.0870113,
"total": 5
},
"timed_out": false,
"took": 11
}
我试图从json数据中只提取图片参数,并将其存储为一个数组。 我尝试了以下方法。
for result in res['hits']['hits']:
post = result['_source']['image']
print(post)
和这个
respars = json.loads(res['hits']['hits'][0]['_source'])['image']
print(json.dumps(respars, indent=4, sort_keys = True))
这两个方法都出现了错误。
TypeError: byte indices must be integers or slices, not str
我相信前面也有类似的问题,但我无法通过这个错误。我怎么才能解决这个问题呢?
答案
与其经历手动处理响应的痛苦,你可以使用 Elasticsearch-DSL 来自PyPi的包。
另一答案
要获得所有的 形象 在 _source 条目为列表,您可以使用 名单理解:
image_list = [source['_source']['image'] for source in res['hits']['hits']]
产出:
['0000000028037c08_1544283640.314629.jpg',
'0000000028037c08_1544283642.963721.jpg',
'0000000028037c08_1544283640.629583.jpg']
以上是关于用Python解析Elasticsearch的json输出。的主要内容,如果未能解决你的问题,请参考以下文章
第三百七十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)用Django实现我的搜索以及热门搜索