Solr-3
Posted 健哥说编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr-3相关的知识,希望对你有一定的参考价值。
1、增量导入数据
思想:
1、需要给表创建一个字段为timestamp类型。
2、在Solr的data-config.xml文件中定义以下属性。
(1) query用于定义全量导入。
(2) deltaQuery用于查询那些根据时间还没有导入的ID。
(3) deltaImportQuery用于增加导入数据,deltaQuery返回多少个id,deltaImportQuery就会执行多少次。
步1、创建数据表
创建数据表,并添加一个列,用于保存timestamp类型。
CREATE TABLE books(
id VARCHAR(32) PRIMARY KEY,
NAME VARCHAR(50),
addr VARCHAR(100),
create_time TIMESTAMP
);
INSERT INTO books VALUES(REPLACE(UUID(),'-',''),'张三同学','山东济南',SYSDATE());
INSERT INTO books VALUES(REPLACE(UUID(),'-',''),'张四同学','北京',SYSDATE());
INSERT INTO books VALUES(REPLACE(UUID(),'-',''),'李四哥们','上海机场',SYSDATE());
步2、添加两个jar文件
将:
solr-dataimporthandler-7.5.0.jar
solr-dataimporthandler-extras-7.5.0.jar
两个文件,放到
solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib目录下。
步3、添加配置文件
在solr-7.5.0\server\solr\${core}\conf目录下,添加一个配置文件,如取名为:
data-delta-config.xml
具体内容如下:
<dataConfig>
<dataSource name="source1" type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/sso?characterEncoding=UTF-8&useSSL=false"
user="root" password="1234"/>
<document>
<entity name="books" pk="id"
dataSource="source1"
query="select id,name,addr from books"
deltaImportQuery="select id,name,addr from books where id=’${dih.delta.id}’"
deltaQuery="select id from books where create_time>’${dataimporter.last_index_time}’">
<field column="id" name="id"/>
<field column="name" name="name"/>
<field column="addr" name="addr"/>
</entity>
</document>
</dataConfig>
其中:
dih的意思为DataImportHandler和简写。
注意${..}两边都有单引号。
步4、添加数据导入
在目录:solr-7.5.0\server\solr\${core}\conf下的文件:solrconfig.xml中添加以下信息:
<requestHandler name="/dataimport2" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-delta-config.xml</str>
</lst>
</requestHandler>
步5、启动Solr
配置完成以后,启动Solr先做全量导入,然后再做增量导入,如下:
就只会导入一部分数据了。
以下是查询出来的最新的一行记录:
2、自动增量导入数据
上例已经实现数据导入和数据的增量导入,只不过增量导入必须要手工在页面上实现:
1、通过脚本-在linux上可以使用定时任务
使用crontab -e 添加定时任务
可以是get形式的:
http://localhost:8983/solr/core1/dataimport2?command=delta-import&clean=false&commit=true
也可以是post形式,将command=delta-import&clean=false&commit=true
在sh文件中添加以下语句,下面配置的-G参数,为GET请示,-d为具体的参数:
*/1 * * * * \
/usr/bin/curl -G \
-d "command=delta-import&clean=false&commit=true"
"http://localhost:8983/solr/demo/dataimport"
在linux上执行curl的结果示例,以下示例-d参数为post请求的参数:
# curl -d "command=delta-import&clean=false&commit=true" "http://192.168.56.1:8983/solr/core1/dataimport2"
{
"responseHeader":{
"status":0,
"QTime":7},
"initArgs":[
"defaults",[
"config","data-delta-config.xml"]],
"command":"delta-import",
"status":"idle",
"importResponse":"",
"statusMessages":{
"Total Requests made to DataSource":"3",
"Total Rows Fetched":"4",
"Total Documents Processed":"2",
"Total Documents Skipped":"0",
"Delta Dump started":"2018-10-01 22:05:59",
"Identifying Delta":"2018-10-01 22:05:59",
"Deltas Obtained":"2018-10-01 22:05:59",
"Building documents":"2018-10-01 22:05:59",
"Total Changed Documents":"2",
"":"Indexing completed. Added/Updated: 2 documents. Deleted 0 documents.",
"Committed":"2018-10-01 22:05:59",
"Time taken":"0:0:0.71"}}
建议请求两次,获取到 "Total Changed Documents":"2",就是具体数量。
以上是关于Solr-3的主要内容,如果未能解决你的问题,请参考以下文章