Наличие типов можно проверить через client.indices.existsType. Для полей нужно смотреть в mapping. Однако, такой подход может быть не безопасен в много-поточном приложении (два потока проверяют что новый тип отсутствует и потом начинают его одновременно создавать). К тому же, я бы не рекомендовал создавать больше одного типа в индексе (если это, конечно, не нужно для parent/child). Если типы статические, то лучше их задавать во время создания индекса. Если типы и поля надо добавлять динамически, то я бы возложил эту работы на elasticsearch с использованием index templates и dynamic templates.
1 Like