Использование _id для идентификатора документа в эластичном поиске

#java #json #elasticsearch

#java #json #elasticsearch

Вопрос:

У меня есть документ с _id в качестве параметра. У меня есть приведенный ниже JSON

 {  
   "_id":{  
      "$oid":"52af48b5d55148fa0c199643"
   },
   "email":"example.ex@example.com"
}
  

Соответствующий класс Java:

 @Document(indexName = "Test")
public class Test {

  @Id
  @ObjectId
  private String _id;

  private String email;
}
  

Преобразование объекта json выполнено успешно, но существует проблема с сохранением данных в эластичном поиске.

 org.elasticsearch.index.mapper.MapperParsingException: Field [_id] is a metadata field and cannot be added inside a document. Use the index API request parameters
  

Я просмотрел некоторые ссылки и пришел к выводу, что я не могу использовать _id.. Но я ищу способ использовать JsonProperty, но это также не работает, поскольку я предполагаю, что ObjectId использует JsonProperty внутренне.

Пожалуйста, предоставьте предложения

Ответ №1:

Просто используйте следующим образом

 {  
     "_id":"52af48b5d55148fa0c199643",
      "email":"example.ex@example.com"
}
  

И удалите @ObjectId

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

1. Привет, спасибо за ваш пост… Я не могу изменить формат json, поскольку он поступает из внешнего источника

Ответ №2:

Как и в сообщении об ошибке, вы не можете использовать поле с именем _id внутри документа.

Чтобы исправить это, используйте функцию «заменить все» (или подобную функцию, которая заменяет substring в другой substring) и замените все вхождения «_id» на «id»

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

1. Не могли бы вы, пожалуйста, предложить какой-нибудь адаптер json для преобразования в этих случаях … я не могу изменить формат json, поскольку он поступает из внешнего источника