импорт данных из в индекс elasticsearch с помощью файла json и команды curl

#elasticsearch

#elasticsearch

Вопрос:

Я пытаюсь импортировать данные, расположенные в файле json, в индекс elasticsearch с помощью команды curl.

Индекс создается kibana следующим образом

   PUT employees
  {
    "mappings" : {
        "properties":{
            "fields": {
                "properties": {
                    "id": {"type": "text"},
                    "nom": {"type": "text"},
                    "prenom": {"type": "text"},
                    "sexe": {"type": "text"},
                    "socials": {
                        "properties": {
                            "name": {"type": "text"},
                            "url": {"type": "text"} 
                        }
                    },
                }
            }   
        }
    }
}
 

Я запускаю следующую команду для импорта данных

  curl -XPUT -H "Content-Type: application/json" localhost:9200/_bulk --data-binary @users.json
 

users.json файл содержит данные, представленные следующим образом

  {"index": {"_index": "users", "_type": "user", "_id": 1}}
 {"fields": {"id": "5fe60ae52b40e53609c803ec","nom": "Jessica","prenom": "Herrera","aboutMe": "anim","socials": [{"name": "faacebook","url": "https://www.facebook.com/profile?id=5445546"},{"name": "linkedin","url": "https://www.linkedin.com/profile?id=5445546"}],"affiliations": [{"organisation": "ANARCO","equipe": "developpement","pays": "Russian Federation","dateD": "2013-06-03T00:00:00Z" ,"dateF": "2013-06-03T00:00:00Z" }]}}
 

Вот ошибка, которую я получаю

  "type":"illegal_argument_exception","reason":"Rejecting mapping update to [users] as the final mapping would have more than 1 type 
 

Я прочитал много ресурсов, но все еще не могу понять, чего мне не хватает.

Ответ №1:

«тип»:»illegal_argument_exception», «причина»: «Отклонение обновления сопоставления для [пользователей], поскольку окончательное сопоставление будет иметь более 1 типа

Вы получаете вышеуказанную ошибку из-за критических изменений в Elasticsearch 6.x, в которых типы сопоставления были устаревшими.

Индексы, созданные в Elasticsearch 7.0.0 или более поздней версии, больше не принимают сопоставление по умолчанию. Индексы, созданные в 6.x, будут продолжать функционировать, как и раньше, в Elasticsearch 6.x. Типы устарели в API-интерфейсах версии 7.0, с критическими изменениями в API создания индекса, сопоставления put, получения сопоставления, размещения шаблона, получения шаблона и получения сопоставлений полей.

Вам необходимо изменить свой JSON как —

 {"index": {"_index": "users", "_id": 1}}
{"fields": {"id": "5fe60ae52b40e53609c803ec","nom": "Jessica","prenom": "Herrera","aboutMe": "anim","socials": [{"name": "faacebook","url": "https://www.facebook.com/profile?id=5445546"},{"name": "linkedin","url": "https://www.linkedin.com/profile?id=5445546"}],"affiliations": [{"organisation": "ANARCO","equipe": "developpement","pays": "Russian Federation","dateD": "2013-06-03T00:00:00Z" ,"dateF": "2013-06-03T00:00:00Z" }]}}
 

Комментарии:

1. Но при этом я не могу получить документ по идентификатору, этот http://localhost:9200/users/2 запрос get не работает, выдает incorrect http method for the uri users/2 ошибку. Даже если я задам тип по умолчанию, как users/default/2 он ничего не возвращает.

2. @lies makhloufi для извлечения документа, который вам нужно использовать http://localhost:9200/users/_doc/2 . Обратитесь к этой документации elastic.co/guide/en/elasticsearch/reference/current /… , чтобы узнать больше о get API. И не могли бы вы также поддержать мой ответ 🙂