solr之mysql全量同步与增量同步

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010634288/article/details/83688130

一、solr管理员命令

二、案例实战说明(全量同步与增量同步)

一、solr管理员命令

我们在生产环境时,需要管理员维护solr服务器的数据信息,,那么这里有3种主要手段:

1.curl方式

curl http://localhost:8080/solr/update --data-binary "<delete><query>title:abc</query></delete>" -H 'Content-type:text/xml; charset=utf-8'

#删除完后,要提交

curl http://localhost:8080/solr/update --data-binary "<commit/>" -H 'Content-type:text/xml; charset=utf-8'

2、用自带的 post.jar,在 /usr/local/solr/solr-5.3.2/example/exampledocs 目录下:

java -Ddata=args -jar post.jar "<delete><id>42</id></delete>"

#怎么使用 post.jar 查看帮助

java -jar post.jar -help

3、在solr客户端,访问你的索引库(我认为最方便的方法)

1)documents type 选择 XML

2)documents 输入下面语句

<delete><query>*:*</query></delete>

<commit/>

二、案例实战说明

2.1全量同步

我们已经对solr又来一个初步的认知,那么我们异步在真实的项目中如何去对solr进行使用呢?

一般来说我们会从数据库中把相关信息加载到solr中,然后定时去于后台数据库进行同步

solr有2种同步手段:1、增量同步 2、全量同步

举个例子:

第一步:创建数据库solr,然后创建一张表solr_test,插入几条数据即可

第二步:编辑/usr/local/solr/solr-5.3.2/example/example-DIH/solr/solr/conf/solrconfig.xml

添加一下内容

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
      <lst name="defaults">
           <str name="config">data-config.xml</str>
      </lst>
  </requestHandler>

第三步在solrconfig.xml 同级的目录下新增data-config.xml并且加入如下内容

<dataConfig>
		<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.19.100:3306/solrtest"  user="root"  password="123456"/>
           <document>
                <entity name="solr_test" transformer="DateFormatTransformer" query="SELECT id, subject, content, update_at FROM solr_test WHERE id >= '${dataimporter.request.id}'">
					<field column="id" name="id"/>
					<field column="subject" name="subject"/>
					<field column="content" name="content"/>
                    <field column="update_at" name="update_at" dateTimeFormat="yyyy-MM-dd HH:mm:ss" />
                </entity>
          </document>
	</dataConfig>

说明:这里使用了一个${dataimporter.request.id},这个是参数,后面在做数据导入时,会使用到,以此条件为基准读数据。

第四步:添加jar包到tomcat目录中。

将/usr/local/solr/solr-5.3.2/dist目录下的solr-dataimporthandler-5.3.2.jar、solr-dataimporthandler-extras-5.3.2.jar复制到tomcat的/usr/local/tomcat/apache-tomcat-7.0.29/webapps/solr/WEB-INF/lib文件夹中,当然,也包括mysql的jdbc jar包:mysql-connector-java-5.1.44-bin.jar

cp /usr/local/solr/solr-5.3.2/dist/solr-dataimporthandler-extras-5.3.2.jar /usr/local/tomcat/apache-tomcat-7.0.29/webapps/solr/WEB-INF/lib
cp /usr/local/solr/solr-5.3.2/dist/solr-dataimporthandler-5.3.2.jar /usr/local/tomcat/apache-tomcat-7.0.29/webapps/solr/WEB-INF/lib

第五步:编辑/usr/local/solr/solr-5.3.2/example/example-DIH/solr/solr/conf/schema.xml

配置文件,去把数据库里面有的字段,添加到schema.xml中,如果有则无需配置。

第六步:进行数据库访问授权操作,本地的mysql需要得到授权:

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;

使用命令:telnet IP 端口 试着连接数据库

这样就表示已经连接上mysql了

第七步:统一linux服务器时间与windows服务器时间

由于我这边的mysql是在windows系统中,solr在虚拟机内,因此为了同步功能,需要将linux的系统时间与Windows的系统时间保持一致

使用命令:date -s

date -s "2018-11-02 15:58:33"

现在我们开始导入数据

我们再次查询数据已经导入

在/usr/local/solr/solr-5.3.2/example/example-DIH/solr/solr/conf文件夹下有一个dataimport.properties。该文件记录了最后一次导入的时间,这里的时间用的是linux的时间

所以我们在需要将solr服务器的时间和mysql服务器的时间相对应

假如我在数据库新增了一条数据

PS:

我们这个时候可以不通过管控台直接使用命令,这样的方式和通过管控台点击按钮的产生的结果是一样的

http://192.168.46.143:8080/solr/solr/dataimport?command=full-import&clean=

true&commit=true&wt=json&indent=true&verbose=false&optimize=false&debug=false&id=1

我们再次查看dataimport.properties。我们的更新时间变了,数据也多了一条

二、增量同步

我们实际工作中,我们第一次导入数据需要全量导入,那么全量以后,我们则需要进行增量导入,增量导入的标准就是数据库中的最后更新时间update_at字段,这个时间需要和我们看到的dataimport.properties里面的last_index_time进行对比来进行增量同步

在这里,我们需要去修改我的data-config.xml文件,修改之前先了解几个概念

query:查询数据库符合条件的记录

deltaQuery:增量索引查询主键ID

deltaImportQuery:增量索引查询导入的数据

deletedPkQuery:增量缩影删除主键ID

然后我修改data-config.xml文件


        <dataConfig>
                <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.0.102:3306/solrtest"  user="root"  password="123456"/>
           <document>
                <entity name="solr_test" pk="id" transformer="DateFormatTransformer" query="SELECT id, subject, content, update_at FROM solr_test WHERE id >= '${dataimporter.request.id}'"
                                deltaImportQuery="select * from solr_test where id='${dih.delta.id}'"
                                deltaQuery="select id from  solr_test where update_at > '${dih.last_index_time}'"
                                >
                                        <field column="id" name="id"/>
                                        <field column="subject" name="subject"/>
                                        <field column="content" name="content"/>
                    <field column="update_at" name="update_at" dateTimeFormat="yyyy-MM-dd HH:mm:ss" />
                </entity>
          </document>
        </dataConfig>

并在数据库中添加1条数据,他的最后更新时间大于dataimport.properties的last_index_time时间

下面我们进行增量同步

这里就多了一条记录了

那在平时工作过程中,我们不可能定时地来控制台进行点击按钮进行增量同步的操作,那么我们可以通过程序定时访问URL的方式来进行增量操作,或者在linux里面使用crontab定时执行调用增量地址(这里注意command=delta-import而不是full-import),访问地址

http://192.168.46.143:8080/solr/solr/dataimport?command=delta-import&clean=

false&commit=true&wt=json&indent=true&verbose=false&optimize=false&debug=false

猜你喜欢

转载自blog.csdn.net/u010634288/article/details/83688130
今日推荐