代码之家  ›  专栏  ›  技术社区  ›  Tony

ElasticSearch:等待长时间运行的请求完成

  •  0
  • Tony  · 技术社区  · 7 年前

    知道什么时候 长距离跑 ElasticSearch请求完成了吗?

    今天,我有一个进程周期性地从一个AWS托管的ES中清除大约10万个文档,其中包含大约6000万个文档。

    var settings = new ConnectionSettings(new Uri("https://mycompany.es.aws.com"));
    settings.RequestTimeout(TimeSpan.FromMinutes(3)); // not sure this helps
    
    var client = new ElasticClient(settings);
    
    var request = new DeleteByQueryRequest("MyIndex") { ... };
    
    // this call will return an IsValid = true, httpstatus = 504 after ~60s,
    var response = await client.DeleteByQueryAsync(request);
    

    即使超时设置为3分钟,调用也始终在~60秒后返回,响应为空,状态代码为504。虽然通过Kibana,我可以看到删除操作在接下来的几分钟内继续(并正确完成)。

    有没有更好的方法来请求和监视(等待完成)长时间运行的ES请求?

    1 回复  |  直到 7 年前
        1
  •  0
  •   LeBigCat    7 年前

    这不是嵌套弹性问题,嵌套查询中的默认超时为0(无超时)。

    您从Amazon服务器获得超时(默认为60秒)

    https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/ts-elb-error-message.html

    这个链接解释了你需要知道的一切:)

        2
  •  0
  •   Simon Lang    7 年前

    我同意@lebigcat的观点,超时来自AWS,这不是嵌套问题。

    但要回答你的问题: 这个 _delete_by_query 请求支持 wait_for_completion 参数。如果设置为 true ,请求立即返回任务ID。然后可以通过任务API请求任务状态。

    https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html