Python导入JSON至Elasticsearch遇问题:索引字段为空求解决
解决Elasticsearch数据索引后字段为空的问题
你的问题出在数据结构不符合Elasticsearch的索引规范:当前你把所有数据塞进了一个文档,且activite和top_activites是用数字作为键的嵌套对象,这种结构无法被ES正确识别展示,所以看起来字段为空。以下是两种正确的索引方式:
方式一:拆分数据为独立文档(推荐)
把每个序号对应的activite和top_activites作为单独的文档索引,更适合后续的查询、统计需求:
from elasticsearch import Elasticsearch, helpers client = Elasticsearch(hosts=["http://localhost:9200"]) docs = [] # 拆分原始数据为对应条目 activite_list = {"0":"94.99Z","1":"93.12Z","2":"88.99B","3":"90.01Z","4":"88.91A"} top_list = {"0":195,"1":193,"2":111,"3":55,"4":36} # 遍历生成独立文档 for idx in activite_list: docs.append({ "_index": "index_for_python_test", "activite": activite_list[idx], "top_activites": top_list[idx] }) helpers.bulk(client, docs)
方式二:将数据转为数组格式存入单个文档
如果需要把所有数据放在同一个文档里,要把嵌套的键值对转为数组,让ES能正确识别字段:
from elasticsearch import Elasticsearch, helpers client = Elasticsearch(hosts=["http://localhost:9200"]) docs = [{ "_index": "index_for_python_test", "activite": ["94.99Z", "93.12Z", "88.99B", "90.01Z", "88.91A"], "top_activites": [195, 193, 111, 55, 36] }] helpers.bulk(client, docs)
为什么原代码不行?
你原代码中的activite和top_activites是以数字为键的嵌套对象,而非数组或常规字段,ES虽然会存储这些数据,但可视化工具(如Kibana)默认不会解析展示这种结构,所以你看到字段为空。调整后的结构符合ES索引规范,能被正确解析和展示。
内容的提问来源于stack exchange,提问作者stehu
相关产品推荐
相关产品推荐

