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

How can I force NEST to NOT populate request on Bulk API response?

我找遍了所有地方,没能找到这个问题的合适答案。我使用以下代码创建了一个 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 版

在 NEST 1.x 中,请求字节始终在响应中可用,但您可以编写不执行此操作的 HttpConnection 实现,覆盖 DoSynchronousRequest and DoAsyncRequest.

如果您收到 OutOfMemoryException,这听起来像是您试图在一个批量请求中发送过多的数据。考虑将数据分成多批批量请求。