首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用嵌套批量Api将文档添加到elasticsearch

如何使用嵌套批量Api将文档添加到elasticsearch
EN

Stack Overflow用户
提问于 2014-10-17 21:33:29
回答 4查看 8K关注 0票数 2

我是Elasticsearch的新手。我需要使用嵌套api的批量选项插入文档。

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

代码语言:javascript
复制
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");
        }

但是当我运行代码时,我得到了以下错误:

代码语言:javascript
复制
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:

请帮帮我..我的代码中有什么错误吗?

EN

回答 4

Stack Overflow用户

发布于 2015-02-09 17:30:46

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

希望这能有所帮助

票数 3
EN

Stack Overflow用户

发布于 2015-07-13 06:21:10

我遇到了这个问题,解决方案是在ConnectionSettings中包含here中的defaultIndex属性,例如:

代码语言:javascript
复制
var node = new Uri("http://something:9200");
var settings = new ConnectionSettings(node, "someDefaultIndexValue");
var client = new ElasticClient(settings);
票数 0
EN

Stack Overflow用户

发布于 2015-07-16 18:19:59

我这样做:

代码语言:javascript
复制
        var node = new Uri(elasticSearchURI);
        var connectionPool = new SniffingConnectionPool(new[] { node });
        var config = new ConnectionSettings(connectionPool)
                                .SniffOnConnectionFault(false)
                                .SniffOnStartup(false)
                                .SetTimeout(600000)
                                .DisablePing();
        var EsClient = new ElasticClient(config);

然后我创建索引,之后我使用类似这样的东西:

代码语言:javascript
复制
        List<Categories> categList = new List<Categories>();

        if (categoriesData != null)
        {
            Parallel.ForEach(categoriesData, element =>
            {
                Categories inf = new Categories();

                inf.Code = element.Code;
                inf.Level = element.Level;

                lock(categList)
                {
                    categList.Add(inf);
                }

            });

            EsClient.IndexMany<Categories>(categList,"index_name","type_name")
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26426205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档