elasticsearch 如何使用NEST Bulk Api向elasticsearch添加文档,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如何使用NEST Bulk Api向elasticsearch添加文档,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 如何使用NEST Bulk Api向elasticsearch添加文档

elasticsearch 如何使用NEST Bulk Api向elasticsearch添加文档,elasticsearch,nest,elasticsearch,Nest,我对弹性搜索是新手。 我需要使用嵌套api使用批量选项插入文档 我必须从一个表中索引5000个文档。下面是我用于批量索引的代码 public ActionResult CreateBulk() { var descriptor=新的BulkDescriptor(); foreach(在db.attention.Take(5000.ToList()中进行var测试) { descriptor.Index(op=>op.Document)(新考勤 { AttendanceId

我对弹性搜索是新手。 我需要使用嵌套api使用批量选项插入文档

我必须从一个表中索引5000个文档。下面是我用于批量索引的代码

public ActionResult CreateBulk()
{            
var descriptor=新的BulkDescriptor();
foreach(在db.attention.Take(5000.ToList()中进行var测试)
{
descriptor.Index(op=>op.Document)(新考勤
{
AttendanceId=test.AttendanceId,
AttendanceDate=测试。AttendanceDate,
地产=测试地产,
除法=测试,除法,
FieldNo=测试。FieldNo,
Employee=test.Employee,
活动=测试活动,
数量=测试。数量
}));                
}
var bulkresult=ElasticClient.Bulk(描述符);
返回操作(“索引”);
}
但是当我运行代码时,我得到以下错误:

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:
System.NullReferenceException未由用户代码处理
HResult=-2147467261
Message=对象引用未设置为对象的实例。
源=嵌套
堆栈跟踪:
在c:\Users\gmarz\code\elasticsearch-net\src\Nest\ExposedInternals\NestSerializer.cs中的Nest.nestserializeBulkDescriptor(IBulkRequest bulkRequest)处:第166行
在c:\Users\gmarz\code\elasticsearch net\src\Nest\ElasticClient Bulk.cs中的Nest.ElasticClient.b_u1b6(ElasticsearchPathInfo`1p,BulkDescriptor d)处:第31行
在c:\Users\gmarz\code\elasticsearch-net\src\Nest\ElasticClient.cs中的Nest.ElasticClient.Dispatch[D,Q,R](D描述符,Func`3 Dispatch)处:第82行
在c:\Users\gmarz\code\elasticsearch-net\src\Nest\ElasticClient.cs中的Nest.ElasticClient.Dispatch[D,Q,R](Func`2选择器,Func`3 Dispatch)处:第70行
在c:\Users\gmarz\code\elasticsearch-net\src\Nest\ElasticClient-Bulk.cs中的Nest.ElasticClient.Bulk(Func`2 bulkSelector)处:第27行
位于D:\GIT Source\ElasticSearch\AttendancePOC\AttendancePOC\Controllers\AttendanceController.cs中的AttendancePOC.Controllers.AttendanceController.CreateBulk()处:第114行
在lambda_方法中(闭包、控制器基、对象[])
位于System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller,Object[]参数)
位于System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext ControllerContext,IDictionary`2参数)
位于System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext ControllerContext,ActionDescriptor ActionDescriptor,IDictionary`2参数)
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass42.b__41()中
在System.Web.Mvc.Async.AsyncResultRapper.c_uuu显示类8`1.b_uuu7(IAsyncResult)
位于System.Web.Mvc.Async.AsyncResultRapper.WrappedAsyncResult`1.End()
位于System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c_uuDisplayClass37.c_uuDisplayClass39.b_u33()中
在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass4f.b__49()中
内部异常:

请帮帮我。。我的代码有什么问题吗?

我也有同样的问题。 我忘了为这个查询设置索引名。 我已经设置了一个配置,在创建新的ElasticClient期间设置了一个默认索引,但是配置发生了变化,我的索引为空


希望对我有帮助,我遇到了这个问题,解决方案是在
连接设置中包含
defaultIndex
属性,如所述:

var节点=新Uri(“http://something:9200");
var设置=新连接设置(节点,“someDefaultIndexValue”);
var客户端=新的ElasticClient(设置);

我会这样做:

var节点=新Uri(elasticSearchURI);
var connectionPool=new SniffingConnectionPool(new[]{node});
var config=新连接设置(connectionPool)
.SniffOnConnectionFault(错误)
.SniffOnStartup(错误)
.SetTimeout(600000)
.禁用();
var EsClient=新的ElasticClient(配置);
然后我创建索引,然后使用如下内容:

List categList=new List();
if(categoriesData!=null)
{
Parallel.ForEach(categoriesData,element=>
{
类别inf=新类别();
inf.Code=元素代码;
inf.Level=元素级;
锁(categList)
{
categList.Add(inf);
}
});
EsClient.IndexMany(categList,“索引名称”,“类型名称”)
}

请像这样添加默认索引
connectionSettings=新的connectionSettings(connectionPool)。DefaultIndex(“indexname”)

介意发布您的connectionSettings吗?您正在进行任何类型的自定义序列化吗?另外,您使用的是什么版本的ES和NEST?@Greg我使用的是ES版本1.3.2和NEST版本1.1.1.Greg Marzouka我的连接字符串是:我不是指您到SQL的连接字符串,我是指您传递到ElasticClient实例的ConnectionSettings类。你在更改任何序列化设置吗?@Greg Marzouka…不,我没有更改任何设置。私有静态ElasticClient ElasticClient{get{var setting=新连接设置(新Uri(“);返回新的ElasticClient(设置);}