solr开发,提交索引数据的几种方式

  solr开发,提交索引数据的几种方式

  今天抽空学习了一下solr,有新东西学习就是哈皮! 期待能有机会与实战。实例仅为个人理解学习实例。

  提交到Solr服务器上的数据必须是 SolrInputDocument 类型。

  方案一:利用反射,自定义转换机制

  JavaBean对象转换成SolrInputDocument的方式我们可以自定义。如果我们的Model类符合JavaBean的规范,那么我们可以使用反射获取其内部信息。

  /**

  * @author dennisit@163.com

  *

  * 实体类与SolrInputDocument转换 [测试通过]

  *

  * @param obj

  * 实体对象

  * @return SolrInputDocument

  * SolrInputDocument对象

  */

  public static SolrInputDocument entity2SolrInputDocument(Object obj) {

  if (obj != null) {

  Class cls = obj.getClass();

  Field[] filedArrays = cls.getDeclaredFields(); //获取类中所有属性

  Method m = null;

  SolrInputDocument sid = new SolrInputDocument();

  for (Field f : filedArrays) {

  //因为如果对象序列化之后,会增加该属性,不用对该属性进行反射

  if(!f.getName()。equals("serialVersionUID")){

  try {

  //跟进属性xx构造对应的getXx()方法

  String dynamicGetMethod = dynamicMethodName(f.getName(), "get");

  //调用构造的getXx()方法

  m = cls.getMethod(dynamicGetMethod);

  //属性名,与对应的属性值 get方法获取到的值

  LOG.info(f.getName() + ":" + m.invoke(obj));

  sid.addField(""+ f.getName(), m.invoke(obj));

  } catch (IllegalArgumentException e) {

  e.printStackTrace();

  } catch (IllegalAccessException e) {

  e.printStackTrace();

  } catch (SecurityException e) {

  e.printStackTrace();

  } catch (InvocationTargetException e) {

  e.printStackTrace();

  } catch (NoSuchMethodException e) {

  e.printStackTrace();

  }

  }

  }

  return sid;

  }

  LOG.warn("Object to convert is null.");

  return null;

  }

  此时我们可以使用server中提供的添加solrInputDocument对象的方法进行数据建立索引。

  /**

  * 将对象集合添加至索引[测试通过]

  * @author pudongping

  * @param server

  * @param lists 自定义转换机制

  */

  public static void addConvertBeans(SolrServer server, List lists){

  try {

  server.add(EntityConvert.entityList2SolrInputDocument(lists));

  server.commit(false, false);

  LOG.info("Add convert object list to index finished. ");

  } catch (Exception e) {

  LOG.error("Add convert object list to index error, " + e.getMessage(), e);

  }

  }

  /**

  * 将对象集合添加至索引[测试通过]

  * @author pudongping

  * @param server

  * @param lists 自定义转换机制

  */

  public static void addConvertBeans(SolrServer server, List lists){

  try {

  server.add(EntityConvert.entityList2SolrInputDocument(lists));

  server.commit(false, false);

  LOG.info("Add convert object list to index finished. ");

  } catch (Exception e) {

  LOG.error("Add convert object list to index error, " + e.getMessage(), e);

  }

  }

  测试自定义转换对象建立索引。

  @Test

  public void addConvertBean(){

  Article article1 = new Article();

  article1.setId(UUID.randomUUID()。toString());

  List title = new ArrayList();

  title.add("我在门后假装你人还没走");

  article1.setTitle(title);

  article1.setAuthor("周杰伦");

  SolrEngineHandler.addConvertBean(server, article1);

  }

  @Test

  public void addConvertBeans(){

  List

lists = new ArrayList();

  Article art1 = new Article();

  art1.setId(UUID.randomUUID()。toString());

  List atlts1 = new ArrayList();

  atlts1.add("谁言别后终无悔,寒月清宵绮梦回");

  atlts1.add("深知身在情长在,前尘不共彩云飞");

  art1.setTitle(atlts1);

  art1.setAuthor("柳梦璃");

  lists.add(art1);

  Article art2 = new Article();

  art2.setId(UUID.randomUUID()。toString());

  List atlts2 = new ArrayList();

  atlts2.add("萧萧衷曲无处诉;为伊故,乐所苦。");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值