首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Spring从弹性搜索查询结果返回List<Student>

使用Spring从弹性搜索查询结果返回List<Student>
EN

Stack Overflow用户
提问于 2019-11-19 18:50:19
回答 1查看 761关注 0票数 0

我一直在使用弹性搜索版本5.6.16 & Spring。我想在字符串.For的基础上执行搜索,目的是编写以下代码。

Controller.java

代码语言:javascript
复制
public @ResponseBody String getItem(@RequestParam("data") String data) {
    QueryBuilder qb = QueryBuilders.queryStringQuery(data);
    SearchResponse searchResponse = client.prepareSearch("index")
      .setTypes("default").setQuery(qb).setSize(10).execute().actionGet();
    return  searchResponse;
}

此方法正在返回字符串。但我想得到的结果是List <Student>。其中Student类是:

Student.java

代码语言:javascript
复制
@Getter
@Setter
@AllArgsConstructor
@ToString
public class Student {

    private int id;
    private int name;
}

我正在上传ES索引上的“学生”数据。请告诉我如何从ES列表中得到结果。

EN

回答 1

Stack Overflow用户

发布于 2019-11-19 20:54:42

也许这一变化会帮助你取得进步:

代码语言:javascript
复制
public @ResponseBody List<Student> getItem(@RequestParam("data") String data) {

    List<Student> records = new ArrayList<Student>(); 
    QueryBuilder qb = QueryBuilders.queryStringQuery(data);
    SearchResponse searchResponse = client.prepareSearch("index")
      .setTypes("default").setQuery(qb).setSize(10).execute().actionGet();
    SearchHit[] results = searchResponse.getHits().getHits();
    ObjectMapper objectMapper = new ObjectMapper()
    .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    for(SearchHit hit : results){

        String source = hit.getSourceAsString();
        Student s = objectMapper.readValue(source,Student.class);
        records.add(s);
    }
    return  records;
}

objectMapper

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58940973

复制
相关文章

相似问题

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