【问题标题】:Elasticsearch NEST Get Task FailuresElasticsearch NEST 获取任务失败
【发布时间】:2018-05-14 19:58:30
【问题描述】:

我正在使用 Elasticsearch 5 和 Nest 5。

我通过查询异步运行更新,它将更新大量文档。我正在使用“WaitForCompletion(false)”来执行此操作。

我面临的问题是,当我使用 NEST 获取由 UpdateByQuery 操作创建的任务时,NEST 返回的对象不包含“Failures”集合。

因此,如果我注意到在任务统计中我有版本冲突,例如,我如何在没有访问失败集合的情况下获取具有这些版本冲突的文档的 ID。

我的 UpdateByQuery 如下所示:

query
.Index(allIndexesStr)
.Query(q =>
...
 )
.WaitForCompletion(false)
.Script(script => script
.Inline(scriptStr)
.Params(p =>
    ...
    )
)
...

我得到这样的任务:

new ElasticClient(ESConnectionSettings.Instance.Settings).GetTask(taskId);

更新

如果我在 NEST 上检查 Elasticsearch 响应正文(纯文本),我注意到我得到的信息与在 Kibana 上执行 get 时相同(GET _tasks/{taskId})。所以我知道为什么 NEST 不解析/映射这些数据。

{
  "completed": true,
  "task": {
    "node": "UeShceb_RaqztSOeFnLkvA",
    "id": 44969,
    "type": "transport",
    "action": "indices:data/write/update/byquery",
    "status": {
      "total": 100,
      "updated": 0,
      "created": 0,
      "deleted": 0,
      "batches": 1,
      "version_conflicts": 100,
      "noops": 0,
      "retries": {
        "bulk": 0,
        "search": 0
      },
      "throttled_millis": 0,
      "requests_per_second": -1,
      "throttled_until_millis": 0
    },
    "description": "",
    "start_time_in_millis": 1526329389030,
    "running_time_in_nanos": 27966899,
    "cancellable": true
  },
  "response": {
    "took": 27,
    "timed_out": false,
    "total": 100,
    "updated": 0,
    "created": 0,
    "deleted": 0,
    "batches": 1,
    "version_conflicts": 100,
    "noops": 0,
    "retries": {
      "bulk": 0,
      "search": 0
    },
    "throttled_millis": 0,
    "requests_per_second": -1,
    "throttled_until_millis": 0,
    "failures": [
      {
        "index": "testvisitors-1523737378",
        "type": "esvisitor",
        "id": "3232c447-0f1f-4c00-abf5-d651c26b0c8c",
        "cause": {
          "type": "version_conflict_engine_exception",
          "reason": "[esvisitor][3232c447-0f1f-4c00-abf5-d651c26b0c8c]: version conflict, current version [2] is different than the one provided [1]",
          "index_uuid": "jXhfvWFVRq-NCvZXAyr58A",
          "shard": "1",
          "index": "testvisitors-1523737378"
        },
        "status": 409
      }, ...

【问题讨论】:

  • 为什么不将等待完成设置为真?
  • 它确实返回它,与 Kibana 相同。我用此信息更新了问题。
  • 您确定不是 Kibana 添加了这些额外信息吗?正如@RussCam 所说,它不是已发布 API 的一部分
  • 是的,我检查了 C# 上的 NEST 正文(纯文本)并包含相同的信息。这是由 UpdateByQuery 创建的任务,我不知道是否所有任务都有此信息。这也是有意义的,因为一旦任务完成,您需要获得那些失败的文档......

标签: c# elasticsearch nest


【解决方案1】:

要获得 Reindex 响应,您应该从任务结果中获得 Reindex 响应,如下所示:

var completedReindexResponse = taskResponse.GetResponse<ReindexOnServerResponse>();

更多信息可以查看官方ES文档here

【讨论】:

    猜你喜欢
    • 2016-06-17
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多