Solr-3

Posted 健哥说编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr-3相关的知识,希望对你有一定的参考价值。

1、增量导入数据

思想:

1、需要给表创建一个字段为timestamp类型。

2、Solrdata-config.xml文件中定义以下属性。

(1) query用于定义全量导入。

(2) deltaQuery用于查询那些根据时间还没有导入的ID

(3) deltaImportQuery用于增加导入数据,deltaQuery返回多少个iddeltaImportQuery就会执行多少次。

 

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先做全量导入,然后再做增量导入,如下:

 

 

 

就只会导入一部分数据了。

 

以下是查询出来的最新的一行记录:

 

Solr-3

 

 

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的主要内容,如果未能解决你的问题,请参考以下文章