NEST - IndexMany没有索引我的对象

时间:2016-05-31 10:59:18

标签: c# elasticsearch nest

我已经使用NEST进行弹性搜索了一段时间,直到现在我已经使用了常规的ElasticSearchClient.Index(...)函数,但现在我想在批量操作中索引很多项目。

我找到了IndexMany(...)函数,但是我必须做错了,因为弹性搜索数据库没有添加任何东西,就像使用常规的Index(...)函数一样?

有没有人有任何想法?

提前致谢!

2 个答案:

答案 0 :(得分: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);
 }

答案 1 :(得分: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调用的索引。