我正在运行以下代码,该代码将尝试从数据库中提取数据并使用弹性搜索对其进行索引。 数据量约为100万条记录。 但是代码在中间某处断开,并且错误为“没有配置的节点可用”。 此外,即使代码运行没有错误,它也不会加载整个数据。
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "elasticsearch")
.build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
while(rs.next())
{
Map<String, Object> json = new HashMap<String, Object>();
json.put("id", rs.getLong("id"));
json.put("type",rs.getString("type"));
client.prepareIndex("test", "doc").setSource(json).execute();
}
感谢您提前获得所有帮助
答案 0 :(得分:1)
最有可能的是,您正在超载群集。节点开始耗尽内存/ CPU并死机。不要向它发送如此多的/如此大的索引请求。绝对无法支持,你正在达到极限。或者获得更强大的集群。
查看here,了解有关如何调整大量邮件的详细信息:
整个批量请求需要由接收我们请求的节点加载到内存中,因此请求越大,其他请求可用的内存就越少。批量请求的最佳大小。超过这个尺寸,性能不再提高甚至可能下降。然而,最佳尺寸不是固定数量。它完全取决于您的硬件,文档大小和复杂性,以及索引和搜索负载。
幸运的是,很容易找到这个最佳点:尝试以增加大小的批量索引典型文档。当性能开始下降时,您的批量太大。一个好的起点是批量1,000到5,000个文件,或者,如果你的文件非常大,批量甚至更小。
密切关注批量请求的实际大小通常很有用。一千个1KB文件与一千个1MB文件非常不同。开始玩的好体积大小约为5-15MB。