2016-05-31 56 views
0

我已經使用NEST進行elasticsearch一段時間了,直到現在我已經使用了常規的ElasticSearchClient.Index(...)函數,但現在我想索引很多批量操作中的項目。NEST - IndexMany不索引我的對象

我發現了IndexMany(...)函數,但是我必須做一些錯誤的事情,因爲它沒有像常規Index(...)函數那樣添加到彈性搜索數據庫中?

有沒有人有任何想法?

在此先感謝!

+0

你想同時索引多少個「東西」?大小是多少? HTTP內容長度限制實施的大小限制約爲100MB。 –

+0

對於我的測試,我只使用2個項目,並沒有一個在我的索引中結束。我知道限制:)而且我也沒有從IndexMany(...)函數得到任何錯誤:/ –

+0

響應中的'.DebugInformation'屬性是什麼意思? –

回答

0

我發現這個問題。我必須在索引中指定索引名稱IndexMany

var res = ElasticClient.CreateIndex("pages", i => i.Mappings(m => m.Map<ESPageViewModel>(mm => mm.AutoMap()))); 

       var page = new ESPageViewModel 
       { 
        Id = dbPage.Id, 
        PageId = dbPage.PageId, 
        Name = dbPage.Name, 
        Options = pageTags, 
        CustomerCategoryId = saveTagOptions.CustomerCategoryId, 
        Link = dbPage.Link, 
        Price = dbPage.Price 
       }; 

       var pages = new List<ESPageViewModel>() { page }; 

       var res2 = ElasticClient.IndexManyAsync<ESPageViewModel>(pages, "pages"); 

這可按預期工作。猜猜我可以在配置中指定一個默認索引名稱,以避免爲IndexMany調用指定索引。

0

如果您使用的是C#,您應該創建一個要插入的對象列表,然後調用IndexMany函數。

例子:

List<Business> businessList = new List<Business>(); 

#region Fill the business list 
............................... 
#endregion 

if (businessList.Count == 1000) // the size of the bulk. 
{ 
    EsClient.IndexMany<Business>(businessList, IndexName); 

    businessList.Clear(); 
} 

而在最後,再次檢查

if (businessList.Count > 0) 
{ 
    EsClient.IndexMany<Business>(businessList, IndexName); 
}