我是python和elastic search的新手,我想将一个14gb的json文件导入elasticsearch,如下所示:
{
"_score": 1.0,
"_index": "newsvit",
"_source": {
"content": " \u0628\u0647 \u06af\u0632\u0627\u0631\u0634 \u0627\u06cc\u0631\u0646\u0627\u060c \u062a\u06cc\u0645 \u0647\u0627\u06cc \u062a\u0631\u0627\u06a9\u062a\u0648\u0631\u0633\u0627\u0632\u06cc ",
"title": "\u0641\u06cc\u0646\u0627\u0644 \u062c\u0627\u0645 \u062d\u0630\u0641\u06cc\u061b \u0648\u062f\u0627\u0639 \u0627\u0644\u0628\u0631\u0632 \u062d\u0627\u062c\u06cc \u067e\u0648\u063",
"lead": "\u062a\u0647\u0631\u0627\u0646 - \u0627\u06cc\u0631\u0646\u0627 - \u062f\u06cc\u062f\u0627\u0631 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062c\u0627\u0645 f.",
"agency": "36",
"date_created": 1494521741,
"url": "http://www.irna.ir/fa/News/82525960/",
"image": "uploads/2017/05/11/2561366787.jpg",
"category": "5"
},
"_type": "news",
"_id": "2981938"
}
我想用logstash导入这个文件,但现在有两个问题:
1)
我编写了这个.conf文件来导入它:
input {
file {
start_position => "beginning"
path => "E:/git/consemsearch/ferdowsi-data.json"
sincedb_path => "NULL"
}
}
filter {
json {
source => "message"
}
}
output {
elasticsearch {
hosts => "http://localhost:9200"
index => "news_data"
}
stdout { }
}
但它没有添加我想要的过滤器。我希望能够在elasticsearch/kibana中按中的项目进行筛选 _source
以及 _id
. 如何编写正确的.conf?
2) 此文件非常大,使用logstash导入需要的时间太长。有没有更快的进口方式?
1条答案
按热度按时间xpcnnkqh1#
要从输入到输出“过滤”数据,可以使用“删除”过滤器:
关于性能。这在很大程度上取决于你的硬件。在您的示例中,所有内容都在本地主机上。您正在尝试读取14gb的数据并将其插入同一硬盘。你的硬盘io可能是这里的瓶颈。但它可能来自ram或其他什么东西。
如果您的系统能够管理它,您可以在logstash端添加工人或增加批处理大小。在elasticseach端,您应该从禁用副本开始,并在接收第一个数据集时增加index.refresh\u间隔。
关于优化:https://www.elastic.co/guide/en/elasticsearch/reference/master/tune-for-indexing-speed.html