Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用NEST elasticsearch批量插入Json?_C#_Json_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch,nest,C#,Json,elasticsearch,Nest" /> elasticsearch,nest,C#,Json,elasticsearch,Nest" />

C# 如何使用NEST elasticsearch批量插入Json?

C# 如何使用NEST elasticsearch批量插入Json?,c#,json,elasticsearch,nest,C#,Json,elasticsearch,Nest,我正在尝试使用Nest将多条记录插入数据库。使用IndexMany类插入确实有效,但是我还需要通过json字符串插入对象 我确实查看了github,并找到了一些如何使用RAWclient的示例。在下面的代码示例中,我插入了我的json > var twitter = _jsonData; > var result = client.Raw.BulkPost( > new { twitter } &g

我正在尝试使用Nest将多条记录插入数据库。使用IndexMany类插入确实有效,但是我还需要通过json字符串插入对象

我确实查看了github,并找到了一些如何使用RAWclient的示例。在下面的代码示例中,我插入了我的json

    > var twitter = _jsonData;          
    > var result = client.Raw.BulkPost(
    >               new { twitter }
    >               , qs => qs
    >                   //.Replication(ReplicationOptions.Async)
    >                   .Refresh(true)          );
其他一些信息:

jsondata:

tweet tweet1 = new tweet { id = "104", name = "test104", lastname = "test107" }; //ect....
List<tweet> data; //multiple tweet objects are added
string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
{
      "twitter": "[{'name':'test104','lastname':'test107','id':'104'},{'name':'test105','lastname':'test108','id':'105'},{'name':'test106','lastname':'test109','id':'106'}]"
}
{"error":"Unexpected end-of-input: expected close marker for OBJECT (from [Source: [B@10893e4; line: 1, column: 0])\n at [Source: [B@10893e4; line: 2, column: 3]"}
我从数据库收到的结果:

tweet tweet1 = new tweet { id = "104", name = "test104", lastname = "test107" }; //ect....
List<tweet> data; //multiple tweet objects are added
string json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
{
      "twitter": "[{'name':'test104','lastname':'test107','id':'104'},{'name':'test105','lastname':'test108','id':'105'},{'name':'test106','lastname':'test109','id':'106'}]"
}
{"error":"Unexpected end-of-input: expected close marker for OBJECT (from [Source: [B@10893e4; line: 1, column: 0])\n at [Source: [B@10893e4; line: 2, column: 3]"}

有人知道问题是什么吗?或者我的json/代码中缺少了什么?

对于elasticsearch批量操作,您的json不正确。看

在批量请求中,每个数据对象前面都应该有一个命令,因为单个批量请求可以包含插入、更新或删除,而不仅仅是插入。 因此,您的json应该如下所示

  { "index" : { "_index" : "twitter", "_type" : "tweets" } }\n
  {'name':'test104','lastname':'test107','id':'104'}\n
  { "index" : { "_index" : "twitter", "_type" : "tweets" } }\n
  {'name':'test105','lastname':'test108','id':'105'}\n
  { "index" : { "_index" : "twitter", "_type" : "tweets" } }\n
  {'name':'test106','lastname':'test109','id':'106'}\n
为了减少重复命令的开销,可以将一些参数移动到请求uri。那么json可以更短:

  { "index" : { } }\n
  {'name':'test104','lastname':'test107','id':'104'}\n
在IRawElasticClient中,这意味着将它们移动到Post参数

  var result = client.Raw.BulkPost(new { twitter }, "twitter", "tweets");

谢谢,你上一次编辑成功了。似乎我错过了扩展json格式的文档。在扩展中似乎有很多开销,还有其他扩展方法吗?例如,仅使用1个运算符,数据的格式将是相同的。我认为没有其他方法可以扩展。但是可以使用更短的命令。查看编辑。一年后的今天,似乎client.Raw.BulkPost()在NEST中不可用。如何使用当前版本进行批量调用?它现在是client.LowLevel.bulk()。