Сохранение документов JSON в ElasticSearch с помощью ElasticsearchRepository (данные Java/Spring)

Я пытаюсь сохранить объекты, содержащие (только) строку json, в ElasticSearch, но хочу, чтобы поля в документе json хранились индивидуально в Elastic, а НЕ как одна строка.

Я использую ElasticsearchRepository.

public interface MyRepository extends ElasticsearchRepository<MyEntity, Long>

И настроил мою сущность следующим образом:

@NoArgsConstructor
@Getter
@Setter
@Document(indexName = "my-index")
public class MyEntity
{
    @Id
    private Long key;
    private String json;
}

Если бы объект json был простым, я мог бы воссоздать все поля в сущности и сопоставить их с этими полями. Пример:

json = "{"key":"123", "name":"Bob", "age":30, ...}"

И в MyEntity:

public class MyEntity
{
    @Id
    private Long key;
    private String name;
    private String age;
    // And so on ...
}

Я знаю, что это сработает, но настоящие строки json содержат сотни (вложенных) полей, поэтому я не хочу заново создавать их все в классе сущности.

Могу ли я добиться того же результата, не записывая все поля и продолжая использовать repository.save()?

Этот связанный вопрос относится к 2015 году. Решение передает файл json в setSource(jsonDoc)», но не похоже, что сохраняемые объекты содержат какой-либо json.

Большое спасибо за вашу помощь!

если бы вы создали объект сущности, были ли бы какие-либо поля, допускающие значение NULL? Вы можете использовать инструмент для создания объекта сущности. Я бы использовал чатгпт. но есть и другие инструменты JSON для POJO. Вы хотели бы, чтобы в json присутствовало столько полей, сколько должно существовать в объекте. Тогда некоторые типы, скорее всего, являются строками и должны быть длинными.

janst 17.07.2024 18:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
83
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать аннотацию @Field(type = FieldType.Object) для хранения документов JSON в Elasticsearch с полями, индексируемыми индивидуально, без необходимости заново создавать все поля в вашем классе сущности. Попробуйте этот подход;

@NoArgsConstructor
@Getter
@Setter
@Document(indexName = "my-index")
public class MyEntity {
   @Id
   private Long key;

   @Field(type = FieldType.Object)
   private Map<String, Object> json;
}

Другие вопросы по теме