如何强制NEST不填充批量API响应请求?

时间:2016-06-16 17:43:38

标签: nest elasticsearch-bulk-api

我一直在寻找所有地方,但未能找到合适的答案。我使用以下代码创建了一个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

1 个答案:

答案 0 :(得分:0)

在NEST 1.x中,请求字节始终在响应中可用,但您可以编写一个HttpConnection实现,但不会执行此操作,从而覆盖DoSynchronousRequest和{{3} }。

如果您获得了OutOfMemoryException,这听起来像是您尝试在一个批量请求中发送过多数据。考虑将数据拆分为批量批量请求。