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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值