当前位置: 首页 > 面试题库 >

通过spring数据从elasticsearch获得一个字段

桂浩言
2023-03-14
问题内容

我有这样的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}

由于describeand itemsin User很大,因此从ES检索所有字段非常昂贵。

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

如何在Spring数据中执行此操作?


问题答案:

您需要混合使用源过滤(用于不 检索
重字段)和响应过滤(用于不 返回 重字段)。但是,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);


 类似资料:
  • 我有一份这样的ES文档 我正在使用Spring数据通过存储库接口与ES对话 现在我需要构建一个rest接口来响应这样的JSON格式数据 由于中的和非常大,因此从ES中检索所有字段非常昂贵。 我知道ES有一个名为“响应过滤”的功能可以满足我的要求,但我没有找到在Spring Data中使用它的方法。 如何在spring数据中实现这一点?

  • 有两个df df1 df2 预期产出: 从数据帧中获取唯一行比较,并在df1中显示唯一列 df1

  • 问题内容: 我想知道如何编写此查询。 我知道这个实际的语法是虚假的,但是它将帮助您理解我想要的。我需要这种格式,因为它是更大查询的一部分。 我需要所有这些都在一个查询中返回。 此外,它必须排成一排,因此以下内容将不起作用: 问题答案: 您可以将语句与聚合函数一起使用。这与某些RDBMS中的函数基本相同:

  • 问题内容: 我的页面上有一个通过URL调用spring控制器的页面。 现在,控制器看起来像 我发送的数据使用模式,并试图访问它的,但它显示为空白。 有什么方法可以在查看页面上接收该数据? 问题答案: 您必须为Spring Ajax调用示例添加@ResponseBody批注

  • 我想通过“id”从我的mongodb获取数据。如果我的id与mongodb中id的值匹配,则它将获取该对象,但其抛出错误为: {“message”:“对于模型“PostMessage”“”的路径“\u id”处的值“s-CoAhDKd”,转换为ObjectId失败}

  • 我有一个spring boot 1.5.9应用程序,它使用spring数据elasticsearch(2.1.3)连接到elasticsearch 2.4.0实例。现在,我需要将spring boot升级到版本2,使其能够与新的依赖项一起工作。 如果我使用最新的spring启动版本(2.1.0),它附带了spring数据elasticsearch 3.1.2,它使用elasticsearch 6.