Я выполняю восстановление в PHP для вновь созданного индекса, поэтому данные отсутствуют. Я получаю исключение, которое я ожидаю увидеть, если данные уже были там, но индекс создается заново.Есть ли что-то особенное, что я имею отношение к upsert на вновь созданные индексы?Upsert работает нормально, пока я не добавлю пользовательский анализатор.
{
"error":{
"root_cause":[
{
"type":"remote_transport_exception",
"reason":"[8902bb997443][127.0.0.1:9300][indices:data/write/update[s]]"
}
],
"type":"illegal_argument_exception",
"reason":"mapper [email.keyword] of different type, current_type [text], merged_type [keyword]"
},
"status":400
}
Ниже приведен мой код создания индекса
{
"index":"myindex",
"body":{
"settings":{
"analysis":{
"analyzer":{
"my_email_analyzer":{
"type":"custom",
"tokenizer":"uax_url_email",
"filter":[
"lowercase",
"stop"
]
}
}
}
},
"mappings":{
"properties":{
"ak_additional_recovery_email":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"ak_city_town":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"ak_first_name":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"ak_last_name":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"ak_second_additional_recovery_email":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"ak_state":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"email":{
"type":"text",
"fields":{
"keyword":{
"type":"text",
"analyzer":"my_email_analyzer"
}
}
},
"indexedHash":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"uID":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"uName":{
"type":"text",
"fields":{
"keyword":{
"type":"text",
"analyzer":"my_email_analyzer"
}
}
}
}
}
}
}
А вот код PHP, пытающийся выполнить upsert
$this->client->update([
'id' => $data['uID'],
'body' => [
'doc' => $data,
'upsert' => [
'uName' => $data['uName'],
'email' => $data['email'],
'ak_first_name' => $data['ak_first_name'],
'ak_last_name' => $data['ak_last_name'],
'ak_city_town' => $data['ak_city_town'],
'ak_state' => $data['ak_state']
]
],
'index' => $this->dbName,
'type' => 'general'
]);