做solr的开发已经很长时间了,对于官方的solrj还是不是很满意,所以为了广大solrer能更方便的利用solr,个人封装了一些代码,算是一个小小的框架把,欢迎大家拍砖。
目前项目已经开源,地址:
http://code.google.com/p/clientforsolr/
目前的功能:
1》对solr的commit,update,delete,optimize等进行了封装,提供了更加方便的操作;
2》对实体类到SolrInputDocument或者SolrDocument到实体类或者SolrDocument到SolrInputDocument提供了简单的转换;
3》提供了SolrServer更加便利的获取方法;
简单介绍,更多详情见
http://code.google.com/p/clientforsolr/
例如:
- People p = new People();
- p.setId(1);
- p.setName("1987");
- p.setAge(22);
- SolrInputDocument sid = EntityConvert.entity2SolrInputDocument(p);
People p = new People(); p.setId(1); p.setName("1987"); p.setAge(22); SolrInputDocument sid = EntityConvert.entity2SolrInputDocument(p);
官方提供的 DocumentObjectBinder,如果实体类没有赋值的话,就可能会报错,但是大部分的时间,实体类的每个属性是不可能赋值的。
对于上述的转换,目前,solr的schema.xml的字段名要与实体类的属性名一致,并且提供setter和getter方法,只要满足以上两点即可转换。
- SolrDocument sd = new SolrDocument();
- sd.addField("id", 1);
- sd.addField("name", "1987");
- sd.addField("age", 22);
- People p = EntityConvert.solrDocument2Entity(sd, People.class);
SolrDocument sd = new SolrDocument(); sd.addField("id", 1); sd.addField("name", "1987"); sd.addField("age", 22); People p = EntityConvert.solrDocument2Entity(sd, People.class);
反向转换。
更多请参见api文档!
对于crud,也提供了更加方便的操作,
- // 删除所有记录
- public void deleteAll(SolrServer server);
- // 删除idArrays数组中的记录,该数组中的元素为document的Id,idName为主键名
- public void deleteById(Object[] idArrays, String idName, SolrServer server);
- // 删除单个id记录
- public void deleteById(Object id, String idName, SolrServer server);
- // 删除某个对象,该对象必须有id
- public void deleteByExample(Object obj, String idName, SolrServer server);
- // 更新一个对象,主键必须提供,
- public void update(Object obj, String idName, SolrServer server);
- // 批量更新,Map的key为id,value为要更新的对象
- public void update(Map<Object, Object> objMap, String idName, SolrServer server);
- // 批量提交数据
- public void commit(List<Object> objectList, SolrServer server);
- // 提交一条记录
- public void commit(Object obj, SolrServer server);
- // 查询数据,提供分页支持,第一个参数:SolrParams封装了查询参数;第二个参数要查询的类;第三个参数起始记录;第四个参数查询数据量
- public <T>PaginationSupport<T> query(SolrParams params, Class<T> cls, int start, int rows, SolrServer server);
- // 查询数据,提供分页支持,第一个参数:查询的字符串;第二个参数要查询的类;第三个参数起始记录;第四个参数查询数据量
- public <T>PaginationSupport<T> query(String keyword, Class<T> cls, int start, int rows, SolrServer server);
// 删除所有记录 public void deleteAll(SolrServer server); // 删除idArrays数组中的记录,该数组中的元素为document的Id,idName为主键名 public void deleteById(Object[] idArrays, String idName, SolrServer server); // 删除单个id记录 public void deleteById(Object id, String idName, SolrServer server); // 删除某个对象,该对象必须有id public void deleteByExample(Object obj, String idName, SolrServer server); // 更新一个对象,主键必须提供, public void update(Object obj, String idName, SolrServer server); // 批量更新,Map的key为id,value为要更新的对象 public void update(Map<Object, Object> objMap, String idName, SolrServer server); // 批量提交数据 public void commit(List<Object> objectList, SolrServer server); // 提交一条记录 public void commit(Object obj, SolrServer server); // 查询数据,提供分页支持,第一个参数:SolrParams封装了查询参数;第二个参数要查询的类;第三个参数起始记录;第四个参数查询数据量 public <T>PaginationSupport<T> query(SolrParams params, Class<T> cls, int start, int rows, SolrServer server); // 查询数据,提供分页支持,第一个参数:查询的字符串;第二个参数要查询的类;第三个参数起始记录;第四个参数查询数据量 public <T>PaginationSupport<T> query(String keyword, Class<T> cls, int start, int rows, SolrServer server);
更有提供了SolrServerFactory,更方便的获取SolrServerFactory,获取方式有两种:一种是通过配置文件中,提供SolrHome;第二种是通过程序中给定。
目前,还处于开发中,后续还有更多强大功能正在筹划中... ...