【问题标题】:Return the List<Student> from Elastic Search query result using Spring Boot使用 Spring Boot 从 Elastic Search 查询结果中返回 List<Student>
【发布时间】:2020-03-15 09:09:30
【问题描述】:

我一直在使用 Elastic Search 5.6.16 版和 Spring Boot。我想基于字符串执行搜索。为此我编写了以下代码。

Controller.java

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;
}

此方法返回 String。但我想得到List &lt;Student&gt; 的结果。 Student 类在哪里:

Student.java

@Getter
@Setter
@AllArgsConstructor
@ToString
public class Student {

    private int id;
    private int name;
}

我正在将“学生”的数据上传到 ES 索引。请让我知道如何从 ES 作为 List 获得结果

【问题讨论】:

  • 请分享您的映射和输入查询(数据)
  • @AssaelAzran 先生,您的 mappings 是什么意思?数据 =“John Doe”(比方说)。它正在返回包含“John Doe”的文档,但我想以 List. 的形式获取
  • 好的。在下面找到我的答案。

标签: java spring-boot elasticsearch elasticsearch-5


【解决方案1】:

也许这个改变会帮助你取得进步:

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

希望对你有帮助

【讨论】:

  • 这也不能正常工作。显示此错误。 “无法识别的字段。未标记为可忽略(40 个已知”来源:(StringReader);行:1,列:10](通过引用链:
  • 当我们发送 GetRequest 并且如果数据字符串在 ES 中可用,那么它就会失败。但如果它不存在,它只是显示为空
  • 但是它在哪里失败了?您是否在 searchResponse 对象中获得任何数据?
  • 是的,我在 searchResponse 中获得了所需的数据
  • 看起来 objectmapper 发现了不属于 Student 类的无法识别的字段,我向 objectmapper 添加了配置以忽略无法识别的字段。看我的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-02
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
相关资源
最近更新 更多