You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在控制台正确打印Elasticsearch查询返回的products集合内容?

问题解决:打印Elasticsearch查询返回的Product集合内容

你的代码实现

SearchRequest searchRequest =  SearchRequest.of(s -> s.index("products").query(q -> q.multiMatch(
         t -> t.fields("description","name").query(text)))
         );
SearchResponse searchResponse =  elasticsearchClient.search(searchRequest, Product.class);
List<Hit> hits = searchResponse.hits().hits();
List<Product> products = new ArrayList<>();
for(Hit object : hits){
    System.out.print(((Product) object.source()));
    System.out.println(products.toString());
    products.add((Product) object.source()); 
}

return products;    

问题

调用System.out.println(products.toString())时,控制台仅显示类似@6ae9453[]的引用地址,无法查看集合内Product对象的实际内容。

解决方案

1. 重写Product类的toString()方法

Java默认的toString()方法只会返回类名@哈希码格式,必须在Product类中自定义toString()方法,把对象的所有属性都包含进去,示例如下:

public class Product {
    // 假设你的Product类有这些属性
    private String id;
    private String name;
    private String description;
    
    // 省略getter、setter、构造方法
    
    @Override
    public String toString() {
        return "Product{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", description='" + description + '\'' +
                '}';
    }
}

重写后,打印集合时每个Product对象都会输出具体的属性值。

2. 调整打印时机(可选)

你的代码在循环内打印products时,当前遍历到的Product还没被添加到集合中,所以会打印不完整的集合。如果要打印最终完整的集合,把打印语句移到循环外面:

for(Hit object : hits){
    products.add((Product) object.source()); 
}
// 循环结束后打印完整集合
System.out.println(products);
// 注:直接打印集合即可,toString()会被自动调用

内容的提问来源于stack exchange,提问作者Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:05:19