如何使用 Nest 客户端对 UpdateByQuery 或 Reindex 等 Elasticsearch 操作启用自动切片?
How can I enable automatic slicing on Elasticsearch operations like UpdateByQuery or Reindex using the Nest client?
我正在使用 Nest 客户端以编程方式执行针对 Elasticsearch 索引的请求。我需要使用 UpdateByQuery API 来更新索引中的现有数据。为了提高大型数据集的性能,推荐的方法是使用切片。就我而言,我想使用 here.
中记录的自动切片功能
我已经在 Kibana 开发控制台中对此进行了测试,它运行良好。我正在努力研究如何通过 Nest 客户端界面在代码中设置此 属性。这是一个代码片段:
var request = new Nest.UpdateByQueryRequest(indexModel.Name);
request.Conflicts = Elasticsearch.Net.Conflicts.Proceed;
request.Query = filterQuery;
// TODO Need to set slices to auto but the current client doesn't allow it and the server
// rejects a value of 0
request.Slices = 0;
var elasticResult = await _elasticClient.UpdateByQueryAsync(request, cancellationToken);
关于属性的评论表明它可以设置为“自动”,但它需要很长的时间,所以这是不可能的。
// Summary:
// The number of slices this task should be divided into. Defaults to 1, meaning
// the task isn't sliced into subtasks. Can be set to `auto`.
public long? Slices { get; set; }
设置为 0 只会在服务器上引发错误。有没有其他人尝试这样做?还有其他方法可以配置此行为吗?其他 API 似乎也有同样的问题,比如 ReindexOnServerAsync。
这是规范中的一个错误,也是从规范生成这部分客户端的不幸结果。
The spec has been fixed 并且更改将反映在客户端的未来版本中。不过现在,可以使用以下设置
var request = new Nest.UpdateByQueryRequest(indexModel.Name);
request.Conflicts = Elasticsearch.Net.Conflicts.Proceed;
request.Query = filterQuery;
((IRequest)request).RequestParameters.SetQueryString("slices", "auto");
var elasticResult = await _elasticClient.UpdateByQueryAsync(request, cancellationToken);
我正在使用 Nest 客户端以编程方式执行针对 Elasticsearch 索引的请求。我需要使用 UpdateByQuery API 来更新索引中的现有数据。为了提高大型数据集的性能,推荐的方法是使用切片。就我而言,我想使用 here.
中记录的自动切片功能我已经在 Kibana 开发控制台中对此进行了测试,它运行良好。我正在努力研究如何通过 Nest 客户端界面在代码中设置此 属性。这是一个代码片段:
var request = new Nest.UpdateByQueryRequest(indexModel.Name);
request.Conflicts = Elasticsearch.Net.Conflicts.Proceed;
request.Query = filterQuery;
// TODO Need to set slices to auto but the current client doesn't allow it and the server
// rejects a value of 0
request.Slices = 0;
var elasticResult = await _elasticClient.UpdateByQueryAsync(request, cancellationToken);
关于属性的评论表明它可以设置为“自动”,但它需要很长的时间,所以这是不可能的。
// Summary:
// The number of slices this task should be divided into. Defaults to 1, meaning
// the task isn't sliced into subtasks. Can be set to `auto`.
public long? Slices { get; set; }
设置为 0 只会在服务器上引发错误。有没有其他人尝试这样做?还有其他方法可以配置此行为吗?其他 API 似乎也有同样的问题,比如 ReindexOnServerAsync。
这是规范中的一个错误,也是从规范生成这部分客户端的不幸结果。
The spec has been fixed 并且更改将反映在客户端的未来版本中。不过现在,可以使用以下设置
var request = new Nest.UpdateByQueryRequest(indexModel.Name);
request.Conflicts = Elasticsearch.Net.Conflicts.Proceed;
request.Query = filterQuery;
((IRequest)request).RequestParameters.SetQueryString("slices", "auto");
var elasticResult = await _elasticClient.UpdateByQueryAsync(request, cancellationToken);