1

我在 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”类型的未处理异常

不幸的是,由于异常发生在外部代码(系统或框架?)

4

0 回答 0