首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过春季数据从elasticsearch获得一个字段

通过春季数据从elasticsearch获得一个字段
EN

Stack Overflow用户
提问于 2016-09-13 03:02:23
回答 1查看 3.5K关注 0票数 0

我有这样一份ES文件

代码语言:javascript
复制
class User {
    String name;
    String describe;
    List<String> items;
}

我使用spring数据通过Repository接口与ES对话

代码语言:javascript
复制
interface UserRepository extends Repository<User, String> {
}

现在我需要构建一个rest接口,它响应JSON格式的数据,如下所示

代码语言:javascript
复制
{"name": String, "firstItem": String}

因为describeitemsUser中非常大,所以从ES中检索所有字段非常昂贵。

我知道ES有一个名为“响应过滤”的功能,可以满足我的需求,但我找不到在Spring数据中使用它的方法。

如何在春季数据中做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-13 03:39:26

您需要的是源滤波 (用于不检索重字段)和响应滤波 (用于不返回重字段的)的混合。但是,Spring数据ES (尚未)不支持后者。

对于前者,可以利用NativeSearchQueryBuilder并指定只检索所需字段的FetchSourceFilter。Spring数据ES中还不支持后者。您可以做的是创建另一个名为firstItem的字段,在其中存储items的第一个元素,以便为该查询返回它。

代码语言:javascript
复制
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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39461623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档