我有这样一份ES文件
class User {
String name;
String describe;
List<String> items;
}我使用spring数据通过Repository接口与ES对话
interface UserRepository extends Repository<User, String> {
}现在我需要构建一个rest接口,它响应JSON格式的数据,如下所示
{"name": String, "firstItem": String}因为describe和items在User中非常大,所以从ES中检索所有字段非常昂贵。
我知道ES有一个名为“响应过滤”的功能,可以满足我的需求,但我找不到在Spring数据中使用它的方法。
如何在春季数据中做到这一点?
发布于 2016-09-13 03:39:26
您需要的是源滤波 (用于不检索重字段)和响应滤波 (用于不返回重字段的)的混合。但是,Spring数据ES (尚未)不支持后者。
对于前者,可以利用NativeSearchQueryBuilder并指定只检索所需字段的FetchSourceFilter。Spring数据ES中还不支持后者。您可以做的是创建另一个名为firstItem的字段,在其中存储items的第一个元素,以便为该查询返回它。
private ElasticsearchTemplate elasticsearchTemplate;
String[] includes = new String[]{"name", "firstItem"};
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(matchAllQuery())
.withSourceFilter(new FetchSourceBuilder(includes, null))
.build();
Page<User> userPage =
elasticsearchTemplate.queryForPage(searchQuery, User.class);https://stackoverflow.com/questions/39461623
复制相似问题