2014-02-25 62 views
2

我試圖使用Nest將多個記錄插入到我的數據庫中。插入使用IndexMany類可行,但我也需要通過json字符串插入對象。如何使用NEST彈性搜索批量插入Json?

我看過github,並找到了一些如何使用RAWclient的例子。在代碼示例下面,我插入了我的json。

> var twitter = _jsonData;   
    > var result = client.Raw.BulkPost(
    >    new { twitter } 
    >    , qs => qs 
    >     //.Replication(ReplicationOptions.Async) 
    >     .Refresh(true)   ); 

一些額外的信息:

jsondata:

VAR嘰嘰喳喳:

{ 
     "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: [[email protected]; line: 1, column: 0])\n at [Source: [[email protected]; line: 2, column: 3]"} 

有誰知道這個問題可能是什麼?或者我在我的json /代碼中缺少什麼內容?

回答

5

你的json不適用於elasticsearch批量操作。請參閱documentation

在批量請求中,每個數據對象都應該有一個命令,因爲一個批量請求可以包含插入,更新或刪除,而不僅僅是插入。 所以,你的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"); 
+0

謝謝,你上次編輯確實有效。似乎我錯過了關於bulk的json格式的文檔。 – Greezer

+0

這似乎是一個批量大量的開銷,是否有另一種膨化方式?例如只有一個操作員,數據將是相同的格式。 – Greezer

+0

我不認爲有另一種膨化方式。但可以使用較短的命令。查看編輯。 –

相關問題