我实现了一个重建索引操作,它从一个集合中获取所有元素并将它们添加到索引中,替换索引的旧内容(如果它是空的,则创建索引)。为此,我使用Elasticsearch批量查询,我用Elasticsearch.net批量函数调用它。
我成功地为索引添加元素/使用所有元素创建新索引,但我似乎无法找到如何在批量查询中删除整个索引,以便确保其中没有旧内容项。我可以用另一个调用来完成它,但是这意味着如果我删除索引然后重新创建它就失败了,我认为没有索引,而我猜测,如果失败则在批量查询中索引不会被删除。
这就是我现在用于批量索引的方法(并且有效):
foreach (var element in elements)
{
sb.AppendLine("{ \"index\" : { \"_id\" : \"" + element.Id + "\" } }");
sb.AppendLine(JsonConvert.SerializeObject(element.As<ElementDTO>(), new JsonSerializerSettings() { Formatting = Newtonsoft.Json.Formatting.None }));
}
var response = client.Bulk("elements", "element", sb.ToString());
我尝试添加:
sb.AppendLine("{ \"delete\" : { \"_index\" : \"elements\" } }");
或:
sb.AppendLine("{ \"delete\" }");
在foreach之前但无济于事。有没有办法在向其添加元素之前删除批量索引?