我一直在寻找所有地方,但未能找到合适的答案。我使用以下代码创建了一个NEST客户端:
var myIndex = "myTestIndex";
var myType = "myTestType";
var myClusterUri= "http://localhost:9200";
var uri = new Uri(myClusterUri);
var settings = new ConnectionSettings(uri);
var client = new ElasticClient(settings);
然后,使用它来调用批量api。
var myJson = PopulateJsonForBulkAPI();
var rawBulkResult = client.Raw.Bulk(myIndex, myType, myJson);
我遇到的问题是我在进行批量api调用时遇到OutOfMemoryException。填充myJson的方法会创建一个巨大的JSON块,但不足以抛出异常(但如果重复则大到足以抛出它)。然后,当我调用批量api时,它会抛出OutOfMemoryException,因为NEST保留原始请求(实质上,复制JSON并且没有足够的内存来保存所有内容)。有没有办法调用Bulk API,但是告诉NEST不要保留原始请求,这样就不会在内存中重复大块的JSON?
修改
我正在使用NEST版本1.7.2和ElasticSearch版本1.7.2
答案 0 :(得分:0)
在NEST 1.x中,请求字节始终在响应中可用,但您可以编写一个HttpConnection
实现,但不会执行此操作,从而覆盖DoSynchronousRequest
和{{3} }。
如果您获得了OutOfMemoryException
,这听起来像是您尝试在一个批量请求中发送过多数据。考虑将数据拆分为批量批量请求。