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("萧萧衷曲无处诉;为伊故,乐所苦。");