Задать вопрос
@dark_spectator

ElasticSearch выдает ошибку при добавлении нового типа?

Создаю веб сервис, использую ElasticSearch в качестве основного хранилища данных.
Есть метод регистрации, когда на него прилетает запрос он создаёт нового юзера, это проходит на ура, но вот при создании типа для хранения записей о друзьях пользователя, возникает ошибка.

User.php:
$client = ClientBuilder::create()->build();
        $user = array(
            "login"             => $login,
            "email"             => $email,
            "avatar_url"        => $avatar_url,
            "password"          => $password,
            "email_verify"      => false,
            "email_verify_id"   => $email_verify_id,
            "user_token"        => $user_token,
            "g-balance"         => 0,
            "register_time"     => time(),
            "last_query_time"   => time(),
            "receive_bonuses"   => 0,
            "total_playtime"    => 0,
            "games"             => array(
                $game_name  => array(
                    "playtime"  => 0,
                    "level"     => 0,
                    "save"      => "",
                ),
            ),
        );
        $params = array(
            "index" => "socket-apps-db",
            "type"  => "users",
            "id"    =>  mb_strtolower($login),
            "body"  => $user
        );
        $database_response = $client->index($params);
        if($database_response["result"] == "created"){
            return array(
              "status"  => true,
            );
        }else{
            return array(
                "status"  => false,
            );
        }

UserFriends.php:
$client = ClientBuilder::create()->build();
        $params = array(
            "index" => "socket-apps-friends",
            "type"  => mb_strtolower($login),
            "body" => array(),
        );
        $client->index($params);

При запросе на API первого юзера вставляет, создает все индексы, все прекрасно, а вот на вторую регистрацию отвечает:
{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"Rejecting mapping update to [socket-apps-friends] as the final mapping would have more than 1 type: [socketsystem, hoo]"}],"type":"illegal_argument_exception","reason":"Rejecting mapping update to [socket-apps-friends] as the final mapping would have more than 1 type: [socketsystem, hoo]"},"status":400}


Это связано с маппингом, но я не знаю как решить данную проблему.
  • Вопрос задан
  • 194 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Вам эластик пишет, что type на индекс может быть только один!
Вот это вот
"type" => mb_strtolower($login),
Замените на
"type" => "_doc",
А юзера спрячте в поле в боди.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы