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

标签 c# elasticsearch nest

我正在构建一些抽象函数供我的应用程序调用,这将通过 Nest 访问 elasticsearch。其中一个函数是 Delete(string id) 调用,它很容易实现。我这样做如下:

public void Delete(string id)
{
    esClient.Delete(id);
}

现在假设我想做同样的事情,但同时对多个文档进行操作。我最初的预感是做这样的事情:

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

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

最佳答案

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

var objectsToDelete = new List<YourType> {.. };
var bulkResponse = client.DeleteMany<YourType>(objectsToDelete);

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

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

第三种选择,使用批量删除:

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

关于c# - 如何使用 Elasticsearch Nest 在一次操作中按 ID 删除多个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31028839/

相关文章:

c# - 在 C# 中创建 OCX 控件

c# - C# 中的 Web 服务和属性

c# - 将时间戳记添加到ElasticSearch-Nest 2.0中添加的每个文档中

c# - 为 asp-for 指定自定义名称(仅需要子属性)

股票行情指示器的 C# 异步任务

c# - 使用保留字(类型名称)作为 ExpandoObject 或 Dynamic 属性

elasticsearch - Spring AMQP 和 Elasticsearch - 聚合消息

sorting - 文档的重新评分和排序

elasticsearch - 使用 NEST 客户端通过 Term 查询进行搜索以进行 Elasticsearch

elasticsearch - 无法编写扩展方法以包装NEST客户端方法