我已经使用NEST进行弹性搜索了一段时间,直到现在我已经使用了常规的ElasticSearchClient.Index(...)函数,但现在我想在批量操作中索引很多项目。
我找到了IndexMany(...)函数,但是我必须做错了,因为弹性搜索数据库没有添加任何东西,就像使用常规的Index(...)函数一样?
有没有人有任何想法?
提前致谢!
答案 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调用的索引。