Есть ли способ обновить документ безболезненным сценарием без изменения порядка незатронутых полей?

Я использую Elasticsearch Update by Query API для обновления некоторых документов с помощью безболезненного скрипта, подобного этому (фактическийquery посложнее):

POST ts-scenarios/_update_by_query?routing=test
{
  "query": {
    "term": { "routing": { "value": "test" } }
  },
  "script": {
    "source": """ctx._source.tagIDs = ["5T8QLHIBB_kDC9Ugho68"]"""
  }
}

Это работает, за исключением того, что при переиндексировании другие поля переупорядочиваются, включая некоторые классы, которые автоматически (де) сериализуются с использованием обработки типов JSON.NET. Это означает документ со следующим источником до обновления:

  {
    "routing" : "testsuite",
    "activities" : [
      {
        "$type" : "Test.Models.SomeActivity, Test"
      },
      {
        "$type" : "Test.Models.AnotherActivity, Test",
        "CustomParameter" : 1,
        "CustomSetting" : false
      }
    ]
  }

заканчивается как

  {
    "routing" : "testsuite",
    "activities" : [
      {
        "$type" : "Test.Models.SomeActivity, Test"
      },
      {
        "CustomParameter" : 1,
        "CustomSetting" : false,
        "$type" : "Test.Models.AnotherActivity, Test"
      }
    ],
    "tagIDs" : [
      "5T8QLHIBB_kDC9Ugho68"
    ]
  }

который JSON.NET не может десериализовать. Есть ли способ указать сценарию (или API обновления по запросу) не изменять порядок этих других полей?

Если это важно, я использую Elasticsearch OSS версии 7.6.1 на macOS. Я не проверял, будет ли здесь работать конвейер Ingest, так как я не знаком с ними.


(Оказывается, я могу сделать десериализацию более гибкой, установив на MetadataPropertyHandling собственность ReadAhead, как упоминалось здесь. Это работает, но, как уже упоминалось, это может снизить производительность и могут быть другие ситуации, когда порядок полей имеет значение. Технически этого не должно быть; JSON - это не XML, но всегда есть крайние случаи, когда это имеет значение.)

0 ответов

Другие вопросы по тегам