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