Solr配置导入MySQL数据

1. 编写配置文件

1)编写data-config-comment.xml,此文件用于描述如何查询MySQL数据,如何将数据变换导入索引。

假设有一个数据库叫mooc,其中有个表叫comment,代表学生的评论

其中:

  • entity对应MySQL数据库表中的一行
  • query对应全库导入的SQL查询
  • queryImportQuery 对应增量导入的SQL查询
  • deltaQuery对应增量导入获取最新修改的行ID,这些ID用于queryImportQuery,SQL的含义中
DATE(updatetime) >= ‘${dih.last_index_time}‘ OR DATE(writetime) >= ‘${dih.last_index_time}

表示comment的更新时间updatetime,或者comment的写入时间writetime比上一次的导入时间$(dih.last_index_time)还大。

<dataConfig>
   <dataSource type="JdbcDataSource" 
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost/mooc" 
              user="root" 
              password="root"/>
   <document>
    <entity name="comment" 
	query="SELECT id, DATE_FORMAT(writetime, ‘%Y-%m-%dT%TZ‘) as ‘writetime‘, title from comment"
	deltaImportQuery="SELECT id, DATE_FORMAT(writetime, ‘%Y-%m-%dT%TZ‘) as ‘writetime‘, title from comment where id=‘${dih.delta.id}‘"
	deltaQuery="SELECT id FROM comment WHERE DATE(updatetime) >= ‘${dih.last_index_time}‘ OR DATE(writetime) >= ‘${dih.last_index_time}‘">       
	   <field column="id" name="id"/>	  
	   <field column="writetime" name="writetime"/>
	   <field column="title" name="title"/>       
    </entity>   
  </document>
</dataConfig>

2)假设要创建一个名为mooc的solr核,在其conf目录中的schema.xml文件中编写fields,加入id,writetime,title,其中text_cn,需要使用我上一则博客写的中文分词插件。

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />    
<field name="writetime" type="tdate" indexed="true" stored="true"/>
<field name="title" type="text_cn" indexed="true" stored="true"/>

3) 配置Solr的solrconfig.xml

在D:\libs\solr-4.10.2\example\solr\mooc\conf目录中,创建data-config-comment.xml

在solrconfig.xml中创建数据导入handler用来导入comment表,如下编写,其中的data-config-comment.xml即是第1步写的

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

2.配置使用到的JAVA库文件

创建D:\libs\solr-4.10.2\example\solr\mooc\lib,拷贝solr-dataimporthandler-4.10.2和mysql-connector-java-5.1.26-bin到此,这两个库用于导入和查询数据库

3.启动Solr

进入solr的example目录

java -jar start.jar

3.导入为索引数据

在浏览器运行如下命令做全库导入,表示将数据,导入到Solr核mooc中

http://localhost:8983/solr/mooc/dataimportcomment?command=full-import&commit=y

如果带clean=false参数,则表示不删除原数据

增量导入

http://localhost:8983/solr/mooc/dataimportcomment?command=delta-import

4.删除索引文件

编写一个XML文件,内容为

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

执行命令

java -Durl=http://localhost:8983/solr/mooc/update  -jar post.jar delete_docs.xml

5. 查询数据

1)使用Solr的edismax query,查询“的”字,返回ID,title,和writetime,以json格式,可以改成wt=xml,表示使用xml格式,但为了程序处理方便,用json

http://localhost:8983/solr/mooc/select?q=的&wt=json&indent=true&defType=edismax&qf=title&omitHeader=true&fl=id,title,writetime

2)精简的,只查出来ID

http://localhost:8983/solr/mooc/select?q=的&wt=json&defType=edismax&qf=title&omitHeader=true&fl=id

omitHeader=true表示取出数据信息

3)查询日期,使用如下参数

到目前为止:

fq=writetime:[* TO NOW]

从2011年8月19号到2014年8月19号:

fq=writetime:[2011-08-19T11:50:23Z TO 2014-08-19T11:50:23Z]

从2011年8月19号以后:

fq=writetime:[2011-08-19T11:50:23Z TO *]

4)高亮显示关键字

http://localhost:8983/solr/mooc/select?q=好的&wt=json&indent=true&defType=edismax&qf=title&omitHeader=true&fl=id,title,writetime&hl=true

hl=true表示开启高亮显示

6.前端搜索操作流程

前端java script 发请求给后端的servlet,servlet向搜索引擎发出查询请求,返回结果给前端

7.定时增量导入数据

1)先写导入脚本sh_delta_import.sh

#!/bin/sh
curl "http://localhost:8983/solr/mooc/dataimportcomment?command=delta-import"
curl "http://localhost:8983/solr/mooc/dataimportcomment?command=delta-import"

重复一次,是因为Solr可能会在第一次返回一个警告,再执行一次就导入了。

2)配置/etc/crontab,添加一行,表示每天4点执行

00 04 * * * root /mooc/solr-4.10.2/example/sh_delta_import.sh

3)重启定时程序

/etc/rc.d/init.d/crond restart
时间: 2024-08-08 21:49:53

Solr配置导入MySQL数据的相关文章

解决Solr增量导入MySQL数据的问题

步骤一:在solrconfig.xml中插入一个新的requestHandler,增加如下几行 <requestHandler name="/dataimportcommentdelta" class="org.apache.solr.handler.dataimport.DataImportHandler">  <lst name="defaults">  <str name="config"&

如何导出和导入mysql数据(数据迁移)

本文转自 如何导出和导入mysql数据(数据迁移) 这是其中一种方法,非常简单 1. 导出数据库数据 mysqldump -uroot -p dp_db > dumpout.sql 其中 root是账户名 dp_db是需要导出的数据库名称 dumpout.sql存储导出的数据 2. 将导出的数据dumpout.sql放到你的目标机器上(如果是远程目标机器的话,直接将dunmpout.sql copy到目标机器就行).这里假设cp到主目录下~/ 3. 在目标机器的数据库里建立新数据库,这里建立名为

SOLR环境搭建以及全量导入MYSQL数据

SOLR文档 前言 因为项目中要用到solr,因此花了一周多的时间研究了一下solr,其中的各种问题我就不说了,特别是这两天在研究定时增量索引的时候,心里不知道多少个XXX在奔腾,好了,废话不多说,下面把我得研究成果跟大家分享一下,另外对于SOLR是什么,大家还是自行度娘吧,让我说我也说不清楚. 版本 SOLR SOLR最新的版本是5.3,但是我没有用最新的版本,用的是4.10.4. JDK JDK的版本是jdk1.7.0_13,这里要说一下的就是4.10版本的SOLR需要1.7以上的JDK,刚

我与solr(二)--导入mysql数据库

关于solr的搭建详见上一篇的随笔. 步骤1: 在webapps中solrhome下新建一个文件夹名字叫做mynode(名字不固定,可以随便取,但是这个名字在后面的配置中会有所关联.)然后在mynode文件下新建一个名字叫做conf的文件夹(这个文件名字最后不要改.)然后把官网下下来的solr项目中solr-6.0.0\server\solr\configsets\data_driven_schema_configs\conf下的所有东西复制到conf中去.(注意不要复制错!)最后把solr-6

Solr Dataimporthandler 导入MySQL 内存溢出。

最近准备把一千九百多万数据导入Solr中,在以前测试数据只有一两百万,全量导入没有任务问题.但是,换成一千九百万数据时,solr报内存异常,整个tomcat无法使用.我发现,我给tomcat最大堆内存512M.我觉得,可能是内存过小,于是,我把内存改大些,1024M(set JAVA_OPTS=-server -Xms1024m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256M ).结果,还是内存溢出.我想已经不是tomcat内存的问题(当然,如果

Solr-5.3.1 dataimport 导入mysql数据

最近需要计算制造业领域大词表每个词的idf,词表里一共九十多万个词,语料一共三百七十多万篇分词后文献.最开始尝试用程序词表循环套语料循环得到每个词的idf,后来又尝试把语料存入mysql然后建立全文索引再循环用sql语句去查每个词的idf,效率都十分不理想. 最新的想法是利用solr搜索引擎的速度来做,所以首先要把mysql的数据导入solr. 未完

导入mysql数据问题:Cannot load from mysql.proc. The table is probably corrupted

解决方法:原因是mysql.proc升级时有个字段没有升级成功. 在mysql5.1中mysql.proc表的comment字段是varchar(64): `comment` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', 但在mysql5.5中mysql.proc表的comment字段应该是text:`comment` text CHARACTER SET utf8 COLLATE utf8_bin NOT N

solr搜索之mysql导入数据到solr(四)

1      mysql导入数据到solr 方式一:创建项目,查询出数据,一条一条add到solr中:(不推荐) 方式二:通过配置复制数据到solr中 以上已完成了在本地window8中对solr的部署,为solr添加了一个自定义的coredemo,并且引入了ik分词器. 那么该如何将本地的mysql的数据导入到solr中呢? 1.1    准备工作 1.1.1     准备数据源 mysql数据源:test库中的user表(7条数据),其中这个update_time字段是用于solr更新数据库

solr导入数据库数据-tinyint数据转boolean

solr在导入mysql数据库数据时,遇到一个问题:数据类型为tinyint的数据对应不到solr中的数据类型,因此就需要将tinyint转一下. 修改db-data-config.xml文件,如下: 1 <dataSource type=”JdbcDataSource” driver=”com.mysql.jdbc.Driver” user=”dbuser” password=”dbpassword” batchSize=”-1″ 2 url=”jdbc:mysql://db_host/dat