solr client 简化solr编程

做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/


例如:
Java代码
  1. People p = new People();  
  2. p.setId(1);  
  3. p.setName("1987");  
  4. p.setAge(22);  
  5. 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方法,只要满足以上两点即可转换。

Java代码
  1. SolrDocument sd = new SolrDocument();  
  2. sd.addField("id", 1);  
  3. sd.addField("name", "1987");  
  4. sd.addField("age", 22);  
  5. 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,也提供了更加方便的操作,

Java代码
  1. // 删除所有记录  
  2. public void deleteAll(SolrServer server);   
  3. // 删除idArrays数组中的记录,该数组中的元素为document的Id,idName为主键名  
  4. public void deleteById(Object[] idArrays, String idName, SolrServer server);  
  5. // 删除单个id记录  
  6. public void deleteById(Object id, String idName, SolrServer server);  
  7. // 删除某个对象,该对象必须有id  
  8. public void deleteByExample(Object obj, String idName, SolrServer server);  
  9. // 更新一个对象,主键必须提供,  
  10. public void update(Object obj, String idName, SolrServer server);  
  11. // 批量更新,Map的key为id,value为要更新的对象  
  12. public void update(Map<Object, Object> objMap, String idName, SolrServer server);  
  13. // 批量提交数据  
  14. public void commit(List<Object> objectList, SolrServer server);  
  15. // 提交一条记录  
  16. public void commit(Object obj, SolrServer server);  
  17. //  查询数据,提供分页支持,第一个参数:SolrParams封装了查询参数;第二个参数要查询的类;第三个参数起始记录;第四个参数查询数据量  
  18. public <T>PaginationSupport<T> query(SolrParams params, Class<T> cls, int start, int rows, SolrServer server);  
  19. // 查询数据,提供分页支持,第一个参数:查询的字符串;第二个参数要查询的类;第三个参数起始记录;第四个参数查询数据量  
  20. 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;第二种是通过程序中给定。

目前,还处于开发中,后续还有更多强大功能正在筹划中... ...
posted @ 2010-03-09 13:34  searchDM  阅读(841)  评论(0编辑  收藏  举报