【发布时间】:2021-07-13 17:58:50
【问题描述】:
我有以下 POJO
@Document(indexName = "person", type = "user")
public class Person {
@Id
private String id;
@Field(type = FieldType.String)
private String name;
@Field(type = FieldType.Nested)
private List<Car> car;
// getter/setter
}
public class Car {
@Field(type = FieldType.String)
private String name;
@Field(type = FieldType.String)
private String model;
// getter/setter
}
在下面的类中,我想直接为给定的人检索嵌套字段“汽车”,名称作为参数传递,但它返回一个空值列表。
public class ElasticsearchRepo {
private ElasticsearchOperations op;
public List<Car> getCars(String name) {
String[] includeFields = new String[]{"car"};
String[] excludeFields = null;
NativeSearchQuery query = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchQuery("name", name))
.withSourceFilter(new FetchSourceFilter(includeFields, excludeFields)).build();
SearchHits<Car> searchHits = op.search(query, Car.class, IndexCoordinates.of("person"));
return customerSearchHits.getSearchHits().stream().map(s -> s.getContent().getCars())
.collect(Collectors.toList());
}
但是,如果在上面的 searchHits 代码中我将类更改为 Person,如下所示,我将返回 pojo Person,其中属性“cars”是唯一填写的属性(所有其他属性都检索为 null):
SearchHits<Person> searchHits = op
.search(query, Person.class, IndexCoordinates.of("person"));
但是我怎样才能直接检索嵌套的属性汽车?
【问题讨论】:
标签: java elasticsearch spring-data spring-data-elasticsearch