如何使用Elasticsearch Nest在一次操作中按ID删除多个文档

Jim*_*Jim 5 c# elasticsearch nest

我正在为我的应用程序调用构建一些抽象函数,这将通过Nest命中弹性搜索.其中一个功能是Delete(string id)呼叫,这很容易实现.我这样做了如下:

public void Delete(string id)
{
    esClient.Delete(id);
}
Run Code Online (Sandbox Code Playgroud)

现在让我们说我想做同样的事情,但同时操作几个文件.我最初的预感是做这样的事情:

public void Delete(IEnumerable<string> ids)
{
    esClient.DeleteMany(ids); // won't compile
}
Run Code Online (Sandbox Code Playgroud)

正如我的评论所述,这样做不会编译.在Nest中通过ID批量删除文档的正确方法是什么?

Rob*_*Rob 14

要使用esClient.DeleteMany(..)你必须传递要删除的对象集合.

var objectsToDelete = new List<YourType> {.. };
var bulkResponse = client.DeleteMany<YourType>(objectsToDelete);
Run Code Online (Sandbox Code Playgroud)

您可以使用以下代码解决此问题:

var ids = new List<string> {"1", "2", "3"};
var bulkResponse = client.DeleteMany<YourType>(ids.Select(x => new YourType { Id = x }));
Run Code Online (Sandbox Code Playgroud)

第三个选项,使用批量删除:

var bulkResponse = client.Bulk(new BulkRequest
{
    Operations = ids.Select(x => new BulkDeleteOperation<YourType>(x)).Cast<IBulkOperation>().ToList()
});
Run Code Online (Sandbox Code Playgroud)