【发布时间】:2014-10-17 13:33:29
【问题描述】:
我是 Elasticsearch 的新手。 我需要使用 NEST api 使用批量选项插入文档。
我必须从一个表中索引 5000 个文档。下面是我用于批量索引的代码。
public ActionResult CreateBulk()
{
var descriptor = new BulkDescriptor();
foreach (var test in db.Attendance.Take(5000).ToList())
{
descriptor.Index<Attendance>(op => op.Document(new Attendance
{
AttendanceId = test.AttendanceId,
AttendanceDate = test.AttendanceDate,
Estate = test.Estate,
Division = test.Division,
FieldNo = test.FieldNo,
Employee = test.Employee,
Activity = test.Activity,
Quantity = test.Quantity
}));
}
var bulkresult = ElasticClient.Bulk(descriptor);
return RedirectToAction("Index");
}
但是当我运行代码时,我收到以下错误:
System.NullReferenceException was unhandled by user code
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=Nest
StackTrace:
at Nest.NestSerializer.SerializeBulkDescriptor(IBulkRequest bulkRequest) in c:\Users\gmarz\code\elasticsearch-net\src\Nest\ExposedInternals\NestSerializer.cs:line 166
at Nest.ElasticClient.<Bulk>b__1b6(ElasticsearchPathInfo`1 p, BulkDescriptor d) in c:\Users\gmarz\code\elasticsearch-net\src\Nest\ElasticClient-Bulk.cs:line 31
at Nest.ElasticClient.Dispatch[D,Q,R](D descriptor, Func`3 dispatch) in c:\Users\gmarz\code\elasticsearch-net\src\Nest\ElasticClient.cs:line 82
at Nest.ElasticClient.Dispatch[D,Q,R](Func`2 selector, Func`3 dispatch) in c:\Users\gmarz\code\elasticsearch-net\src\Nest\ElasticClient.cs:line 70
at Nest.ElasticClient.Bulk(Func`2 bulkSelector) in c:\Users\gmarz\code\elasticsearch-net\src\Nest\ElasticClient-Bulk.cs:line 27
at AttendancePOC.Controllers.AttendanceController.CreateBulk() in D:\GIT Source\ElasticSearch\AttendancePOC\AttendancePOC\Controllers\AttendanceController.cs:line 114
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
InnerException:
请帮帮我。我的代码有什么问题吗?
【问题讨论】:
-
介意发布您的 ConnectionSettings 吗?你在做任何类型的自定义序列化吗?另外,您使用的是什么版本的 ES 和 NEST?
-
@Greg 我使用的是 ES 版本 1.3.2 和 NEST 版本 1.1.1。
-
Greg Marzouka 我的连接字符串是:
-
我不是指你的 SQL 连接字符串,我指的是你传递给 ElasticClient 实例的 ConnectionSettings 类。您是否更改了任何序列化设置?
-
@Greg Marzouka...不,我没有更改任何设置。私有静态 ElasticClient ElasticClient { get { var setting = new ConnectionSettings(new Uri("localhost:9200")); return new ElasticClient(setting); } }
标签: elasticsearch nest