Ответ 1
Spring data elasticsearch поддерживает большинство общих наборов признаков elasticsearch, включая вложенные, внутренние объекты и родительский ребенок (недавно)
когда вы сказали, что хотите использовать вложенные данные (внутренний объект), пожалуйста, убедитесь, что у elasticsearch есть два понятия Inner Object и Nested Object.
Подробное объяснение можно найти в управлении отношениями в elasticsearch
Пример вложенного документа
Сущность лица
<до > <Код >
@Document (indexName = "person", type = "user" )
public class Person {
@Я бы private String id;
private String name;
@Field (type = FieldType.Nested) private List <Car> автомобиль;
// сеттер-геттеры
}
Код>
код >
Автомобильная организация
public class Car {
private String name;
private String model;
//setters and getters
}
Настройка данных
Person foo = new Person();
foo.setName("Foo");
foo.setId("1");
List cars = new ArrayList();
Car subaru = new Car();
subaru.setName("Subaru");
subaru.setModel("Imprezza");
cars.add(subaru);
foo.setCar(cars);
Индексирование
IndexQuery indexQuery = new IndexQuery();
indexQuery.setId(foo.getId());
indexQuery.setObject(foo);
//creating mapping
elasticsearchTemplate.putMapping(Person.class);
//indexing document
elasticsearchTemplate.index(indexQuery);
//refresh
elasticsearchTemplate.refresh(Person.class, true);
Поиск
QueryBuilder builder = nestedQuery("car", boolQuery().must(termQuery("car.name", "subaru")).must(termQuery("car.model", "imprezza")));
SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build();
List persons = elasticsearchTemplate.queryForList(searchQuery, Person.class);
вы можете найти больше тестовых примеров о вложенном и внутреннем объектах в Вложенные тестеры объектов