问题:就是把从solr搜索出来的结果转成我们想要的实体类对象,很常用的情景。

1、使用@Field注解

@Field这个注解放到实体类的属性【字段】中,例如下面

 1 public class User{
 2     /**
 3      * id
 4      */
 5     @Field
 6     private String id;
 7     /**
 8      * 用户名
 9      */
10     @Field
11     private String userName;
12         /**
13      * 密码
14      */
15     @Field
16     private String password;
17 }

 

关于获取SolrClient可以参考

springboot和solr结合测试使用

使用转换

SolrQuery query = new SolrQuery();
query.setQuery("id:1");// 查询内容,id为1
QueryResponse response = solrClient.query(query);
List<User> beans = response.getBeans(User.class);

 

2、使用反射

 1 SolrQuery query = new SolrQuery();
 2 query.setQuery("id:1");// 查询内容,id为1
 3 QueryResponse response = solrClient.query(query);
 4 // 查询结果集
 5 SolrDocumentList results = response.getResults();
 6 List<User> list = new ArrayList();
 7 for(SolrDocument record : records){
 8     User obj = null;
 9     try {
10         obj = User.class.newInstance();
11     } catch (InstantiationException e1) {
12         e1.printStackTrace();
13     } catch (IllegalAccessException e1) {
14         e1.printStackTrace();
15     }
16     Field[] fields = User.class.getDeclaredFields();
17     for(Field field:fields){
18         Object value = record.get(field.getName());
19         if(null == value) {
20             continue;
21         }
22         try {
23             BeanUtils.setProperty(obj, field.getName(), value);
24         } catch (IllegalAccessException e) {
25             e.printStackTrace();
26         } catch (InvocationTargetException e) {
27             e.printStackTrace();
28         }
29     }
30     if(null != obj) {
31         list.add(obj);
32     }
33 }