gpt4 book ai didi

spring - 通过spring数据从elasticsearch中获取一个字段

转载 作者:行者123 更新时间:2023-12-03 01:52:13 27 4
gpt4 key购买 nike

我有一个这样的 ES 文档

class User {
String name;
String describe;
List<String> items;
}

我正在使用 Spring Data 通过 Repository 接口(interface)与 ES 对话
interface UserRepository extends Repository<User, String> {
}

现在我需要构建一个响应这样的 JSON 格式数据的 rest 接口(interface)
{"name": String, "firstItem": String}

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

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

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

最佳答案

您需要的是 source filtering 的组合(因为不是 检索 重字段)和 response filtering (因为不是 返回 重字段)。但是,后者在 Spring Data ES 中不受支持(尚)

对于前者,您可以利用 NativeSearchQueryBuilder并指定 FetchSourceFilter那只会检索您需要的字段。 Spring Data 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);

关于spring - 通过spring数据从elasticsearch中获取一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39461623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com