elasticsearch - 如何将整个 XML 数据库摄取到 Elastic Search?
问题描述
假设我有 20 个 XML 文件,它们是整个数据库。是否可以将所有这 20 个 XML 文件提取到 Elastic Search 中?如果是,有什么可用选项?
解决方案
对于 Python3,我建议使用xmltodict
跑pip install xmltodict elasticsearch
我想xml文件有记录:
<records>
<record>...</record>
...
<record>...</record>
</records>
所以他们必须被分成记录。
使用以下内容编辑名为“load.py”的脚本:
import sys
import xmltodict
import json
from elasticsearch import Elasticsearch
INDEX="xmlfiles"
TYPE= "record"
def xml_to_actions(xmlcontent):
for record in xmlcontent["records"]:
yield ('{ "index" : { "_index" : "%s", "_type" : "%s" }}'% (INDEX, TYPE))
yield (json.dumps(record, default=int))
e = Elasticsearch() # no args, connect to localhost:9200
if not e.indices.exists(INDEX):
raise RuntimeError('index does not exists, use `curl -X PUT "localhost:9200/%s"` and try again'%INDEX)
for f in sys.argv:
with open(f, "rt") as fin:
r = e.bulk(xml_to_actions(xmldict.parse(fin))) # return a dict
print(f, not r["errors"])
使用它:python load.py xml1.xml xml2.xml ... xml20.xml
推荐阅读
- javascript - 如何从不需要的键数组中选择对象中的项目并使用结果创建新对象
- mysql - 嵌套或多个 case 函数
- reactjs - 如何在 react-chat-engine 中使用发布请求创建用户?
- python - 由于客户端网络限制,Python Jira 身份验证失败?
- outlook - 如何在 Outlook 中自动执行 PST 导出
- xml - 在 XSD 中,如何显示一个元素只能位于具有特定属性的父级中?
- javascript - 如何从 javascript 中获取价值?
- python - Django:如果提交表单,则为不同的 html 页面
- angular - 如何将 Observable 和 Subject 组合成 combineLatest?
- c# - 加载 X509Certificate2 以 Windows server 2012 上发生内部错误结束