如何在控制台正确打印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
相关产品推荐
相关产品推荐

