Ahm*_*qji 5 spring elasticsearch spring-data
我选择使用@Entity类也以@Document进行标记,以节省维护DTO的开销。
现在,当尝试索引这些实体时,它们会被存储到具有所有属性的弹性对象中(除非我使用@JsonIgnore明确标记了不需要的实体)。
任何人都可以向我解释实际情况,以及是否有可能仅选择特定的属性。
注意:将其中一些标记为@Field不会有任何区别
我找到了一个可能对某些人有帮助的解决方法。
1. 创建自定义EntityMapper
EntityMapper是spring data elasticsearch包自带的一个接口org.springframework.data.elasticsearch.core,该接口默认有一个实现类,DefaultEntityMapper有两个方法可以重写。
public String mapToString(Object object) 抛出 IOException;
SimpleFilterProvider filters = new SimpleFilterProvider();
filters.setDefaultFilter(SimpleBeanPropertyFilter.filterOutAllExcept(fieldsNotToFilter));
filters.setFailOnUnknownId(false);
String dtoAsString = objectMapper.writer(filters).writeValueAsString(object);
Run Code Online (Sandbox Code Playgroud)
注意,需要@JsonFilter("filterName")注解来标记实体类。
2、将创建好的CustomEntityMapper注入elasticsearch:transport-client bean name="entityMapper" class="com.modym.core.search.CustomEntityMapper
| 归档时间: |
|
| 查看次数: |
2867 次 |
| 最近记录: |