solr 3.5 配置及应用(三)

来源:互联网 发布:淘宝网浮针进针器 编辑:程序博客网 时间:2024/06/08 16:13

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