【问题标题】:bulk insert for elasticsearch nest 5.xelasticsearch nest 5.x 的批量插入
【发布时间】:2017-04-20 06:10:05
【问题描述】:

我一直在尝试使用批量插入功能,但每次使用时都会显示一些映射错误。批量插入函数声明是否已从嵌套 1.x 更改为嵌套 5.x,因为在 5.x 嵌套文档中我没有找到 .bulk() 函数。请推荐

批量插入代码:

        public void bulkInsert(List<BaseData> recordList, List<String> listOfIndexName)
    {

          BulkDescriptor descriptor = new BulkDescriptor();
            descriptor.Index<BaseData>(op => op
                .Document(recordList[j])
                .Index(listOfIndexName[j])

               );


        }

        var result = clientConnection.Bulk(descriptor);


    }

我传递的数据列表如下所示:

[ElasticsearchType(IdProperty = "number")]


class TicketData : BaseData
{        
    //[ElasticProperty(Index = FieldIndexOption.NotAnalyzed, Store = true)]


    [Date(Name = "sys_updated_on", Store = true)]
    public DateTimeOffset sys_updated_on { get; set; }


      [Text(Name = "number", Store = true)] 
    public override string  number { get; set; }


   [Text(Name = "incident_state", Store = true)]
    public string incident_state { get; set; }


  [Text(Name = "location", Store = true)]
    public string location { get; set; }


   [Text(Name = "assigned_to", Store = true)]
    public string assigned_to { get; set; }



[Text(Name = "u_knowledge_id", Store = true)]
    public string u_knowledge_id { get; set; }


    [Text(Name = "u_knowledge_id.u_process_role", Store = true)]
    public string u_knowledge_id_u_process_role { get; set; }

}

【问题讨论】:

  • 错误是什么?
  • 此解决方案可能会对您有所帮助。 stackoverflow.com/questions/22017858/… 或者你可以参考这个,从这个链接你可以得到更多关于批量插入的基本概念谢谢!
  • 您的示例中似乎缺少代码,例如descriptor 是什么?您能否编辑您的问题以添加该详细信息。另外,映射错误是什么? Elasticsearch 返回什么错误?批量请求 json 长什么样子?
  • 我已添加描述符 Russ。错误仍然是一样的
  • 错误是这样的 [0] {index returned 400 _index: datd.ticketlog01-2017.15 _type: basedata _id: IN1 _version: 0 error: Type:illegal_argument_exception 原因:“无法合并非对象映射 [u_knowledge_id] 与对象映射 [u_knowledge_id]" CausedBy: ""} Nest.BulkResponseItemBase {Nest.BulkIndexResponseItem}

标签: elasticsearch version nest elasticsearch-bulk-api


【解决方案1】:

NEST 似乎无法推断出您的实体的正确类型,因为您指定了泛型类型 BaseData,而实际类型是 TicketData。您应该指定要索引的实体的实际类型。由于您的列表中可能有不同的类型,您可以使用GetType() 方法获取实际类型:

descriptor.Index<BaseData>(op => op
    .Document(recordList[j])
    .Index(listOfIndexName[j])
    .Type(recordList[j].GetType())
);

目前,您的查询尝试使用默认映射动态创建不同的类型,而不是将其解释为具有显式映射的现有类型

【讨论】:

  • 错误是DebugInformation "Invalid NEST response built from a successful low level call on POST: /_bulk\r\n# Invalid Bulk items:\r\n operation[0]: index returned 400 _index: datd.ticketlog01-2017.15 _type: ticketdata _id: IN1 _version: 0 error: Type: illegal_argument_exception Reason: \"Can't merge a non object mapping [u_knowledge_id] with an object mapping [u_knowledge_id]\" CausedBy: \"\"\r\n operation[1]: index returned 400 _index: datd.ticketlog01-2016.30 _type: ticketdata
  • 看起来字段类型与其他对象类型冲突。您还有哪些其他映射?
猜你喜欢
  • 2015-08-18
  • 2022-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多