Spring Data Elasticsearch:@Field和非@Field都已建立索引

Ahm*_*qji 5 spring elasticsearch spring-data

我选择使用@Entity类也以@Document进行标记,以节省维护DTO的开销。

现在,当尝试索引这些实体时,它们会被存储到具有所有属性的弹性对象中(除非我使用@JsonIgnore明确标记了不需要的实体)。

任何人都可以向我解释实际情况,以及是否有可能仅选择特定的属性。

注意:将其中一些标记为@Field不会有任何区别

Ahm*_*qji 3

我找到了一个可能对某些人有帮助的解决方法。

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