solr搜索结果转实体类对象的两种方法

Posted xiaostudy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了solr搜索结果转实体类对象的两种方法相关的知识,希望对你有一定的参考价值。

问题:就是把从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 

 

以上是关于solr搜索结果转实体类对象的两种方法的主要内容,如果未能解决你的问题,请参考以下文章

[转]PetaPoco入门

java集合进行排序的两种方式

来自通用模型定义的两种语言的 ORM 实体类生成器

MyBatis注解开发的两种方法@Results和resultMap

关于mybatis中的实体类属性与数据库中的列名不一致的两种解决方法

C#实体对象序列化成Json并让字段的首字母小写的两种解决方法