我正在尝试使用大约500万条记录设置elasticsearch。每个文件有150 KV对。我在Ubuntu 12.04上使用ES 1.2.1,具有4GB RAM和40GB磁盘空间。我已经使用ES的所有默认配置来创建索引,插入文档等等。
这样做时几乎没有问题:
1)我能够使用批量api从JSON文件中插入最多30K条记录。我还观察到,只有15-20MB左右的文件大小才能顺利运行。任何人都可以指定批量导入的原因,上限和最佳大小吗?
2)用于批量api的JSON文件包含数千条记录。因此每次实际数据之前我都必须编写规范行。例如,
{ “索引”:{ “_索引”: “INDEXNAME”, “_类型”: “测试名”, “_ ID”: “someValue中”}}
{“field1”:“value1”,“field2”:“value2”.....}
{ “索引”:{ “_索引”: “INDEXNAME”, “_类型”: “测试名”, “_ ID”: “someValue中”}}
{“field1”:“value1”,“field2”:“value2”.....}
{ “索引”:{ “_索引”: “INDEXNAME”, “_类型”: “测试名”, “_ ID”: “someValue中”}}
{“field1”:“value1”,“field2”:“value2”.....} ......
这不是很麻烦吗?我的意思是如果我必须插入100条记录,我还必须在文件中添加100条规范行吗?
3)我通过一次重复插入30K记录成功插入了3,30,000条记录。但后来我尝试同时执行此操作并开始一次运行5个线程。 ES崩溃!!!内存不足是个原因。我重新启动了ES,发现现在只有2,07,000条记录。在5个分片中只有2个成功,这意味着数据消失了!这是严重的问题,可以打破应用程序。 任何人都可以帮助我理解这么大的数据的理想分片和内存要求吗?我们如何在索引创建时指定这些设置并在创建索引后进行修改?
4)现在在崩溃之后,当我搜索id为'x'的特定记录时,ES会返回数据但是当我尝试使用Get检索同一文档时,它会失败!可能出了什么问题?
非常感谢帮助。提前谢谢。
答案 0 :(得分:0)
我发现最佳点是> 2k和<每个批量请求10k文档和<价值10MB的数据。 ES只能如此快速地编制索引,因此使用过多的数据来索引弹性搜索并不难。
如果您没有尝试过,可以尝试使用Node客户端将批量请求推送到ES。与http / TransportClient不同,由于群集内的数据分配,使用节点客户端减少了额外的网络聊天。它会将数据推送到将存储数据的节点,而不是盲目地将数据推送到节点,然后节点可以将数据传递到最终目的地。如果您有任何需要几天时间才能编制索引的流程,这可以为您节省一些时间。对于需要几个小时的流程,它可能不值得。