solr 3.5 配置及应用(三)

在solr 3.5 配置及应用(二)中在 Document文档和JavaBean相互转换时是比较麻烦的, 现在讲用利用DocumentObjectBinder对象将SolrInputDocument 和 JavaBean对象相互转换

1、在实体类(JavaBean),用@Field来注解字段,注解的名称要与文档的字段名称一致,如@Field("blogId")。如:blogsDO 这也有hibernate的注解要看清楚.

package com.stu.entity;   
 import java.io.Serializable;  
 import java.util.Date;  
 import javax.persistence.Column;  
 import javax.persistence.Entity;  
 import javax.persistence.GeneratedValue;  
 import javax.persistence.GenerationType;  
 import javax.persistence.Id;  
 import javax.persistence.Table;  
 import javax.persistence.Transient;  
 import org.apache.solr.client.solrj.beans.Field;  
   
 import com.stu.commons.util.DateUtils;  
   
 /** 
  * Description: 
  * @author  LiChunming 
  * @version V1.0  
  * @createDateTime:2011-5-17 下午04:38:11  
  * @Company: MSD.  
  * @Copyright: Copyright (c) 2011 
  **/  
 @Entity  
 @Table(name="blogs")  
 public class BlogsDO implements Serializable{  
     /** 
      *  
 */  
     private static final long serialVersionUID = -4721368786493126226L;  
       
     private String id;  
     @Field("blogId")  
     private Integer blogsId;  
     @Field  
     private String title;  
     @Field  
     private String content;  
     //与文档的字段名称是createTime 不一样时要注明,保持一样  
     @Field("createTime")    
     private Date gmtCreate;  
     @Field  
     private String nickName;  
     @Field  
     private String bTypeId;  
     @Field  
     private String bTypeName;  
     private Date gmtModified;  
     private String revDate;  
     private String sDate="";  
     private String eDate="";  
       
     @Transient //(hibernate 的注解)  
     @Field  //在这注解也可以  
     public String getId() {  
         return id;  
     }  
     public void setId(String id) {  
         this.id = id;  
     }  
     //(hibernate 的注解)  
     @Id  
     @GeneratedValue(strategy = GenerationType.IDENTITY)  
     public Integer getBlogsId() {  
         return blogsId;  
     }  
     public void setBlogsId(Integer blogsId) {  
         this.blogsId = blogsId;  
     }  
     public String getTitle() {  
         return title;  
     }  
     public void setTitle(String title) {  
         this.title = title;  
     }  
     public String getContent() {  
         return content;  
     }  
     public void setContent(String content) {  
         this.content = content;  
     }  
       
     public String getNickName() {  
         return nickName;  
     }  
     public void setNickName(String nickName) {  
         this.nickName = nickName;  
     }  
       
     public String getbTypeId() {  
         return bTypeId;  
     }  
     public void setbTypeId(String bTypeId) {  
         this.bTypeId = bTypeId;  
     }  
     @Column(name="gmt_create")  
     public Date getGmtCreate() {  
         return gmtCreate;  
     }  
     public void setGmtCreate(Date gmtCreate) {  
         this.gmtCreate = gmtCreate;  
     }  
     @Column(name="gmt_modified")  
     public Date getGmtModified() {  
         return gmtModified;  
     }  
     public void setGmtModified(Date gmtModified) {  
         this.gmtModified = gmtModified;  
     }  
     @Transient  
     public String getRevDate() {  
          if (this.gmtCreate == null) {  
                 return null;  
             }  
           return DateUtils.formatDate(gmtCreate, "yyyy-MM-dd HH:mm:ss");  
     }  
     public void setRevDate(String revDate) {  
         this.revDate = revDate;  
     }  
     @Transient  
     public String getbTypeName() {  
         return bTypeName;  
     }  
     public void setbTypeName(String bTypeName) {  
         this.bTypeName = bTypeName;  
     }  
     @Transient  
     public String getsDate() {  
         return sDate;  
     }  
     public void setsDate(String sDate) {  
         this.sDate = sDate;  
     }  
     @Transient  
     public String geteDate() {  
         return eDate;  
     }  
     public void seteDate(String eDate) {  
         this.eDate = eDate;  
     }  
     @Override  
     public String toString() {  
         return this.id + "#" + this.blogsId + "#" + this.title + "#" + this.content + "#" + this.bTypeId + "#" + this.bTypeName + "#" + this.nickName+"#" + this.gmtCreate;  
     }  
       
 }  


2、增加文档的方法(这方法就简单多了)

public void writerBlog(BlogsDO blog) {  
         // TODO Auto-generated method stub  
          try {  
              blog.setId(SerialNumberUtil.getRandomNum(4));  
               //获取连接服务  
               CommonsHttpSolrServer solrServer= SolrServer.getInstance().getServer();  
               //实例化  
               DocumentObjectBinder binder = new DocumentObjectBinder();  
               //javabean对象转化为SolrInputDocument对象  
               SolrInputDocument doc1 = binder.toSolrInputDocument(blog);  
               solrServer.add(doc1);  
               //提交事务才能生效  
               solrServer.commit();  
         } catch (SolrServerException e) {  
             // TODO Auto-generated catch block  
             e.printStackTrace();  
         } catch (IOException e) {  
             // TODO Auto-generated catch block  
             e.printStackTrace();  
         }  
     }  


3、查询文档

public List<BlogsDO> searchBlogsListbyBinder( Page page) throws IOException, ParseException {  
       List<BlogsDO> blogList=new ArrayList<BlogsDO>();  
       CommonsHttpSolrServer solrServer= SolrServer.getInstance().getServer();   
       SolrQuery sQuery = new SolrQuery();  
       String para="*:*";   
       sQuery.setQuery(para);  
 try {  
                QueryResponse response=solrServer.query(sQuery);  
                //获取查询文档  
                SolrDocumentList list = response.getResults();  
                //初始化DocumentObjectBinder对象  
                DocumentObjectBinder binder = new DocumentObjectBinder();  
                //SolrDocumentList对象转化为 List<BlogsDO>对象  
                blogList=binder.getBeans(BlogsDO.class, list);  
                //总记录数  
                Integer counts=(int) list.getNumFound();  
                page.setCounts(counts);  
                  
            } catch (SolrServerException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
              
        return blogList;  
}  


参考:http://blog.csdn.net/chunming8302/article/details/7321501

solr 视频:http://www.icoolxue.com/play/2293

猜你喜欢

转载自rd-030.iteye.com/blog/2316890
3.5