[英]How to bulk insert Json using NEST elasticsearch?
我正在嘗試使用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);
var twitter:
{
"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 /代碼中丟失了什么?
您的json不適合Elasticsearch批量操作。 請參閱文檔 。
在批量請求中,每個數據對象前均應帶有命令,因為單個批量請求可以包含插入,更新或刪除,而不僅僅是插入。 所以你的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中,這意味着將它們移至BulkPost參數。
var result = client.Raw.BulkPost(new { twitter }, "twitter", "tweets");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.