solr同步MySQL(二)

solr配置连接mysql实现全量更新和增量更新

数据库连接的配置

前提是完成我上一篇文章的配置solr的下载和安装

  1. 找到我们配置好的core,在conf文件夹中创建data-config.xml 文件,写入如下配置内容,并保存:在这里插入图片描述
    写入如下内容
<dataConfig> 
<!--dataSource标签配置数据库相关的信息-->
<dataSource name = "ds_1" type="JdbcDataSource"   
    driver="com.mysql.jdbc.Driver" 
	url="jdbc:mysql://localhost:3306/数据库名?characterEncoding=UTF-8"   
    user="root" password="密码"/>  
<document>
<!--pk属性指定的是manage-schema文件中的uniqueKey标签中的值,即主键-->  
<entity name="SolrTest" dataSource="ds_1"  PK="id"
          query="select id,`time`,message,`level`,thread_name ,class_name ,method,app_name  from error_log "
		  deltaImportQuery="select id,`time`,message,`level`,thread_name ,class_name ,method,app_name  from error_log where id  = '${dih.delta.id}'"
		  deltaQuery="select id,`time`,message,`level`,thread_name ,class_name ,method,app_name  from error_log where time &gt; '${dih.last_index_time}'"
		  >
		
          <!--以下的字段column属性对应数据库中字段名称,name是对应solr这边配置的名称,注意id,默认名称即为id,表示solr这边一条数据的主键,以下三个是要在solr这边中建立索引的字段,比如数据库中有10个字段,我只需要为3个字段建立索引关系,那这里就写3个就好了
          如果数据库中的主键不是id,比如是objectId,那上边的query需要为它起一个别名为id即可-->
          <field column="id"  name="id" />
          <field column="message"  name="message" />
          <field column="level" name="level" />
		  <field column="thread_name" name="threadName" />  
		  <field column="class_name" name="className" />
		  <field column="method" name="method" />
		  <field column="app_name" name="appName" />
		  <field column="time" name="time" dateTimeFormat="yyyy-MM-dd HH:mm:ss"/>
		 
    </entity>
  </document>  
</dataConfig>  

注意driver,是mysql就写mysql的驱动,是oracle就写oracle的

  1. 然后找到同目录下的solrconfig.xml 文件并打开,在里边加入如下内容,放置的位置你可以放到其他requestHandler
    旁边:
<requestHandler name="/dataimport" class="solr.DataImportHandler"> 
      <lst name="defaults"> 
        <str name="config">data-config.xml</str> 
      </lst> 
    </requestHandler>

3. 然后再找到同目录下的managed-schema 文件并打开,在里边加入如下内容

 <!--数据库中需要索引的字段-->
   <field name="message"      type="string" indexed="true" stored="true" /> 
   <field name="level"        type="string" indexed="true" stored="true" /> 
   <field name="threadName"  type="string" indexed="true" stored="true" /> 
   <field name="className"   type="string" indexed="true" stored="true" /> 
   <field name="method"       type="string" indexed="true" stored="true" /> 
   <field name="appName"     type="string" indexed="true" stored="true" /> 
   <field name="time"     type="date" indexed="true" stored="true" /> 

数据库驱动、solr导入包

上边配置完之后,需要引入几个jar包,数据库驱动包,以及solr的数据导入包,数据库驱动包,要根据你自己是oracle 或者mysql 等引入。至于solr的数据导入包,可以找到solr-7.3.0\dist 文件夹,里边有如下包:
在这里插入图片描述
将以上包拷贝到solr-7.3.0\server\solr-webapp\webapp\WEB-INF\lib 中,如下:
在这里插入图片描述

启动solr,找到如图所示的地方

在这里插入图片描述
执行导入,如下图所示就成功了
在这里插入图片描述
点击query查看数据
在这里插入图片描述

利用spring的定时任务执行自动全量更新和增量更新

据说有很多种方式可以实现

  1. 在solr中配置,有第三方插件实现。
  2. 自己写程序实现。
  3. 写个定时任务发请求实现
    我采用的第三种方式,代码如图所示(前提是:springboot项目整合了solr)

@Component
public class SyncLogScheduler {
    @Autowired
   private SolrService solrService;
    /**
     * 全量索引
     */
 /*   @Scheduled(cron = "0/30 * * * * *")
    public void fullImport() {
        System.out.println("全量更新我执行了--------------------");
        doUpdate("http://localhost:8983/solr/log_core/dataimport?command=full-import&clean=true&commit=true");
    }
*/

    /**
     * 增量索引
     */
    @Scheduled(cron = "0/20 * * * * *")
    public void deltaImport() {
        System.out.println("增量更新我执行了--------------------");
        doUpdate("http://localhost:8983/solr/log_core/dataimport?command=delta-import&clean=false&commit=true");
    }


    private void doUpdate(String url) {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        CloseableHttpResponse response = null;
        try {
            //3.执行请求,获取响应
            response = client.execute(httpGet);
            //看请求是否成功,这儿打印的是http状态码
            System.out.println(response.getStatusLine().getStatusCode());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值