主要是解决在Solr 配置增量索引的时候,如果数据库做了分表比如分了128张,那在配置Solr的data-config.xml的时候会很浪费时间,刚开始我也用dom4生成过,但总是感觉格式有问题,特别是entity的属性的时候deltaImportQuery deltaQuery 这些语句很长,想要换行什么的用dom4j支持并不友好,索性干脆自己用StringBuffer 拼接出来拉到!

package com.test;import java.io.File;
import java.io.FileOutputStream;/*** 北极心* 2019-08-04 12:39:03* 生成Solr增量索引配置xml* */
public class SolrMyXML {//solr节点配置private final static String documentName="docEvspgoods";private final static String name="evspgoods";//这个很有必要,因为其中的增量索引查询主键ID时需要 private final static String pkid="id";// query查询是指 查询出表里所有的符合条件的数据,因为笔者测试的有删除业务,所以  where  后面有一个限定条件 意思为查询未被删除的数据 (注意这个query查询只对第一次全量导入有作用,对增量导入不起作用)private final static String query ="SELECT id,goods_code,goods_name,CREATED_TIME from evsp_goods%s where audit_status=1 and is_sale=1";//次查询是获取以上两步的ID,然后把其全部数据获取,根据获取的数据 对索引库进行更新操作,可能是删除,添加,修改 (此查询只对增量导入起作用,可以返回多个字段的值,一般情况下,都是返回所有字段的列)private final static String deltaImportQuery ="select id,goods_code,goods_name,CREATED_TIME from evsp_goods%s where audit_status=1 and is_sale=1 and id='${dih.delta.id}'";//deltaQuery的意思是,查询出所有经过修改的记录的ID 可能是修改操作,添加操作,删除操作产生的 (此查询只对增量导入起作用,而且只能返回ID值)private final static String deltaQuery ="select id from evsp_goods%s where audit_status=1 and is_sale=1 and CREATED_TIME>'${dataimporter.last_index_time}'";// 此操作值查询那些数据库里伪删除的数据的ID(即isdelete标识为1的数据)  solr通过它来删除索引里面对应的数据 (此查询只对增量导入起作用,而且只能返回ID值)private final static String deletedPkQuery ="select id from evsp_goods%s where audit_status=0 and is_sale=0";//这里是分表规则private final static int tablecount=1;//这些常量不要修改private final static String ENTER = "\r\n";private final static String SPACE = "  ";private final static String SPACEDOUBLE = "    ";private final static String YH = "\"";private final static String H = ">";public static void main(String[] args) {File xmlfile = new File("c://test.xml");new SolrMyXML().createSolrDataConfig(xmlfile);}/*** @param xmlfile*//*** @param xmlfile*/public void createSolrDataConfig(File xmlfile) {try {// 添加根节点StringBuffer xmlstr = new StringBuffer("<document name=").append(YH).append(documentName).append(YH).append(H);// 在根节点下添加第一个子节点for(int i = 0 ;i<tablecount ;i++) {xmlstr.append(ENTER);xmlstr.append(SPACE).append("<entity name=").append(YH).append(name).append(String.valueOf(i)).append(YH).append(ENTER);xmlstr.append(SPACEDOUBLE).append("dataSource=").append(YH).append("JdbcDataSource").append(YH).append(ENTER);//这里是指定数据源,根据自己实际情况定xmlstr.append(SPACEDOUBLE).append("pk=").append(YH).append(pkid).append(YH).append(ENTER);xmlstr.append(SPACEDOUBLE).append("query=").append(YH).append(String.format(query, String.valueOf(i))).append(YH).append(ENTER);xmlstr.append(SPACEDOUBLE).append("deltaImportQuery=").append(YH).append(String.format(deltaImportQuery, String.valueOf(i))).append(YH).append(ENTER);xmlstr.append(SPACEDOUBLE).append("deltaQuery=").append(YH).append(String.format(deltaQuery, String.valueOf(i))).append(YH).append(ENTER);xmlstr.append(SPACEDOUBLE).append("deletedPkQuery=").append(YH).append(String.format(deletedPkQuery, String.valueOf(i))).append(YH).append(H).append(ENTER);String querys = query.toLowerCase();String fieldstr = querys.substring(querys.indexOf("select")+6, querys.lastIndexOf("from"));String[] fields = fieldstr.split(",");for(int k=0;k<fields.length;k++) {xmlstr.append(SPACEDOUBLE);xmlstr.append("<field ");xmlstr.append("column=").append(YH).append(fields[k].replaceAll(" ", "")).append(YH);xmlstr.append(" name=").append(YH).append(fields[k].replaceAll(" ", "")).append(YH);xmlstr.append(" /").append(H).append(ENTER);}xmlstr.append(SPACE);xmlstr.append("</entity>");}xmlstr.append(ENTER);xmlstr.append("</document>");FileOutputStream out = new FileOutputStream(xmlfile);out.write(String.valueOf(xmlstr).getBytes("utf-8"));out.flush();out.close();System.out.println("OK!");} catch (Exception e) {e.printStackTrace();}}
}

转载于:https://my.oschina.net/Thinkeryjgfn/blog/3083231

生成Solr增量索引配置xml相关推荐

  1. solr4.2增量索引之同步(修改,删除,新增)--转载

    原文地址:http://www.jiancool.com/article/12743229775/;jsessionid=14E9B3F1BB33399799884B5C8F15DDE1  solr增 ...

  2. solr 从数据库导入数据,全量索引和增量索引(实例配置原理)

    http://blog.csdn.net/u013378306/article/details/50761610 为防止原文删除特此备份 ------------------------------- ...

  3. 转:solr 从数据库导入数据,全量索引和增量索引(实例配置原理)

    http://blog.csdn.net/u013378306/article/details/50761610 为防止原文删除特此备份 ------------------------------- ...

  4. solr 从数据库导入数据,全量索引和增量索引

    首先说一下是从MySQL数据库导入数据 这里使用的是mysql测试. 1.先在mysql中建一个表:solr_test 2.插入几条测试数据: 3.用记事本打solrconfig.xml文件,在sol ...

  5. [搜索] Solr (三) 全量索引与增量索引

    solr.home  D:solr\home solr.war     D:solr\server\solr 参考文档 IBM developerWorks 文档库  Apache Solr 的新特性 ...

  6. 基于Solr DIH实现MySQL表数据全量索引和增量索引

    实现MySQL表数据全量索引和增量索引,基于Solr DIH组件实现起来比较简单,只需要重复使用Solr的DIH(Data Import Handler)组件,对data-config.xml进行简单 ...

  7. solr mysql 增量索引_基于Solr DIH实现MySQL表数据全量索引和增量索引

    实现MySQL表数据全量索引和增量索引,基于Solr DIH组件实现起来比较简单,只需要重复使用Solr的DIH(Data Import Handler)组件,对data-config.xml进行简单 ...

  8. Solr与MongoDB集成,实时增量索引[转]

    http://www.123905.com/ 一. 概述 大量的数据存储在MongoDB上,需要快速搜索出目标内容,于是搭建Solr服务. 另外一点,用Solr索引数据后,可以把数据用在不同的项目当中 ...

  9. Solr 4.x定时、实时增量索引 - 修改、删除和新增索引

    2019独角兽企业重金招聘Python工程师标准>>> 一.开始增量索引前的准备工作. 1.认识data-config.xml中相关属性 <!-- transformer 格式 ...

最新文章

  1. MYSQL explain详解[转载]
  2. ie8开发人员工具无法使用,按f12任务栏里出现任务,但是窗体不弹出
  3. grub通过img文件启动linux,Linux GRUB实现双系统引导之菜鸟教程
  4. MySQL高级 - 锁 - MyISAM表锁 - 小结
  5. 解决 Gedit 中文乱码
  6. Swift - 重写导航栏返回按钮
  7. 网络进阶:用了HTTPS就安全了吗?HTTPS 会被抓包吗?
  8. mysql 5.1.48-log_mysql5.1+syslog8.3+loganalyzer配置过程
  9. SpringMVC_跟踪请求
  10. 网络安全以及常见的网络攻击
  11. 计算1-1/x+1/x*x
  12. HTML关闭网页弹出窗口代码
  13. 国内首款、完全自主、基于云架构的三维CAD平台——CrownCAD(皇冠CAD)
  14. hash碰撞解决方法
  15. 【Unity】在Inspector上显示自定义的位掩码枚举(Flags)
  16. 面子对中国人为什么这么重要
  17. 千锋逆战班,css注册案例
  18. 移动支付快速崛起,爱贝赋能行业新发展
  19. 第4期——华为WLAN产品介绍
  20. 龙芯中科发布的 《龙芯生态白皮书(2022年)》的.NET 生态章节节选

热门文章

  1. F. chino with ball
  2. 计算机读心术的原理,读心术是什么原理,是真的吗
  3. 基于SSM实现水果商城批发平台
  4. VP8 的败笔 VS H264
  5. __declspec(naked)是用来告诉编译器函数代码的汇编语言为自己的所写,不需要编译器添加任何汇编代码
  6. Puppy linux的引导安装问题
  7. JavaScript和Node.js的关系
  8. 信息安全数学基础(一):同余
  9. 黑马程序员:PHP为何能成最抢手后端语言?
  10. 自动化测试中的滑动验证码解决方案