Передать update_all_types в ElasticSearch Put Mapping

Мы обновляемся до ElasticSearch 2.0 и столкнулись с проблемой с нашими сопоставлениями в Nest 1.7.0: у нас есть два типа, которые имеют общее поле (с одинаковым форматом):

"@timestamp": {
            "type": "date",
            "format": "epoch_millis||dateOptionalTime"
          }

Когда мы пытаемся добавить сопоставление при запуске для одного из затронутых типов (в настоящее время мы PUT делаем сопоставления каждый раз), мы возвращаем эту ошибку:

{
  "error": {
    "root_cause": [{
      "type": "merge_mapping_exception",
      "reason": "Merge failed with failures {[mapper [@timestamp] is used by multiple types. Set update_all_types to true to update [format] across all types.]}"
    }],
    "type": "merge_mapping_exception",
    "reason": "Merge failed with failures {[mapper [@timestamp] is used by multiple types. Set update_all_types to true to update [format] across all types.]}"
  },
  "status": 400
}

Мы используем сопоставление на основе кода, описанное здесь, но я не вижу способ повесить строку запроса на этот метод, не прибегая к свойству Raw нашего клиента, используя что-то вроде этого:

_client.Raw.IndicesPutMapping("ourindex", "ourtype", PutMappingDescriptorObj, parameters => parameters.AddQueryString("update_all_types", null));

Я просмотрел ветвь 2.0 Nest, но не нашел ссылок на этот параметр строки запроса update_all_types для этих вызовов сопоставления.

Предполагая, что вызов IndicesPutMapping() может работать, это наш единственный вариант на данный момент? Я начинаю задаваться вопросом, должны ли мы вместо этого добавлять эти сопоставления только условно.


person Sven Grosen    schedule 10.11.2015    source источник


Ответы (1)


Оказывается, мы смогли найти другой способ: когда мы создавали наше сопоставление, мы явно не указывали формат для нашего поля @timestamp, а с 2.0 это, по-видимому, заставило систему рассматривать его как изменение, отсюда и наша проблема. Мы смогли обойти это, в нашей логике сопоставления закрепив существующий формат для этих полей даты следующим образом:

// formatted strangely to make the addition more obvious
_client.Map<OurType>(m =>
    m.Properties(ps => ps
        .Date(d => d.Name(es => es.Date) // es is a reference to an instance of OurType, and Date is the name of the field being mapped to @timestamp
                    .Format("epoch_millis||dateOptionalTime") // this is what fixed it
             )
        //other props
    )
    //other stuff
);
person Sven Grosen    schedule 10.11.2015