我在 ElasticSearch 1.0 和 NEST 1.0 上使用批量插入。现在我转移到 ElasticSearch 2.0 和 NEST 2.0 并且批量插入会引发 stackoverflow (!) 异常。我的直觉是无限递归正在发生,它消耗了整个堆栈。
这是我的 POCO
[ElasticsearchType(Name = "MyDoc")]
public class MyDoc: DynamicResponse
{
[String(Store = false, Index = FieldIndexOption.NotAnalyzed)]
public string HistoryId { get; set; }
[String(Store = false, Index = FieldIndexOption.NotAnalyzed)]
public string FileId { get; set; }
[Date(Store = false)]
public DateTime DateTime { get; set; }
}
这就是我创建映射的方式:
elastic.Map<MyDoc>(m => m.Index(indexName).AutoMap());
批量插入分两步完成
首先我创建描述符:
List<dynamic> dataRecordList;
var descriptor = new BulkDescriptor();
if (dataRecordList == null || dataRecordList.Count == 0)
{
return;
}
foreach (var dataRecord in dataRecordList)
{
var nonClosedDataRecord = dataRecord;
descriptor.Index<object>(record => record.Index(indexName).Type("MyDoc").Document(nonClosedDataRecord));
}
然后我调用 NESTbulk()
方法
var bulkResponse = elastic.Bulk(d => descriptor);
调用时,我在 foreach 中得到了 stackoverflow 异常descriptor.Index()
编辑
mscorlib.dll 中出现“System.StackOverflowException”类型的未处理异常
不幸的是,由于异常发生在外部代码(系统或框架?)