Я использую клиент REST высокого уровня Java. Вот ссылка на его документацию
Я создал клиент.
trait HighLevelRestClient {
def elasticSearchClient(): RestHighLevelClient = {
new RestHighLevelClient(
RestClient.builder(
new HttpHost("localhost", ElasticSearchPort, "http")))
}
}
При индексировании данных вложенные поля сохраняются как String. Следующий код объясняет, как создается индекс:
val indexRequest = new IndexRequest("my-index", "test-type").source(
"person", person,
"date", DateTime.now()
)
где person - это класс case, представленный как:
Person(personId: String, name: String, address: Address)
и Address сам по себе является классом case, представленным как:
Address(city: String, zip: Int)
Мое приложение требует, чтобы человек сохранялся как пара ключ-значение, чтобы его поля были доступны для поиска. Но когда я использую приведенный выше код, он сохраняется как String.
{
"person" : "Person(my-id, my-name, Address(my-city, zip-value))",
"date" : "2017-12-12"
}
и требуемая структура:
{
"person" : {
"personId" : "my-id",
"name" : "person-name",
"address": {
"city" : "city-name",
"zip" : 12345
}
},
"date" : "2017-12-12"
}
Надеюсь, я хорошо сформулировал вопрос. Любая помощь будет оценена по достоинству. Спасибо!