我正在为应用程序调用构建一些抽象函数,这些函数将通过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()
});

08-28 14:10