我与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.0\solr-6.0.0\example\example-DIH\solr\db\conf下的admin-extra.html, admin-extra.menu-bottom.html ,admin-extra.menu-top.html三个文件也复制到conf中去。

步骤2:

把mysql所需的jar包和solr-6.0\solr-6.0.0\dist下的solr-dataimporthandler-6.0.0.jar和solr-dataimporthandler-extras-6.0.0.jar都复制到项目WEB-INF\lib下。然后在solrconfig.xml文件中加入<lib dir="D:/编程工具/tomcat/apache-tomcat-8.0.32-windows-x64/apache-tomcat-8.0.32/webapps/solr/WEB-INF/lib/" regex=".*\.jar" />(就是把WEB-INF\lib里面的jar包配置到项目中,我这里用的是绝对地址。这段代码大约在solrconfig.xml的70多行处,前面有一堆类似的代码。)

记得将mysql驱动包mysql-connector-java-5.1.18-bin.jar加入到“/tomcat/apache-tomcat-8.0.32-windows-x64/apache-tomcat-8.0.32/webapps/solr/WEB-INF/lib/”目录下。

步骤3:

确定我们需要导入的mysql数据库表。

步骤4:

1、在conf下新建data-config.xml文件。里面内容如下

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver"
                url="jdbc:mysql://192.168.1.12:33060/in_gs_0809" user="admin" password="123456"
                batchSize="-1"/>
      
    <document>
        <entity name="clue" pk="clue_id" dataSource="source1"
                query="select * from  clue"
                deltaImportQuery="select * from clue where clue_id=‘${dih.delta.clue_id}‘"
                deltaQuery="select clue_id from clue where gmt_modified> ‘${dataimporter.last_index_time}‘">
               
            <field column="clue_id" name="id"/>
            <field column="informer_id" name="informer_id"/>
            <field column="title" name="title"/>
            <field column="content" name="content"/>

            <field column="latitude" name="latitude"/>
            <field column="longitude" name="longitude"/>
            <field column="attachment" name="attachment"/>
            <field column="clue_status" name="clue_status"/>

            <field column="del_flag" name="del_flag"/>
            <field column="gmt_create" name="gmt_create"/>
            <field column="create_uid" name="create_uid"/>
            <field column="gmt_modified" name="gmt_modified"/>
            <field column="modified_uid" name="modified_uid"/>
        </entity>
          
    </document>
</dataConfig>

说明:

dataSource是数据库数据源。Entity就是一张表对应的实体,pk是主键,query是查询语句。Field对应一个字段,column是数据库里的column名,后面的name属性对应着Solr的Filed的名字(clue_id对应的是schema.xml中的id)。其中solrdata是数据库名,clue是表名。

其中deltaQuery是增量索引,原理是从数据库中根据deltaQuery指定的SQL语句查询出所有需要增量导入的数据的ID号。然后根据deltaImportQuery指定的SQL语句返回所有这些ID的数据,即为这次增量导入所要处理的数据。核心思想是:通过内置变量“${dih.delta.clue_id}”和 “${dataimporter.last_index_time}”来记录本次要索引的id和最近一次索引的时间。

2、在solrconfig.xml的  <requestHandler name="/select" class="solr.SearchHandler">之上添加

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

3、在conf下面复制managed-schema文件,并重命名为"schema.xml"。修改如下内容:

<field name="id" type="long" indexed="true" stored="true" required="true"/>
    <field name="informer_id" type="long" indexed="true" stored="false"/>
    <field name="phone_number" type="string" indexed="true" stored="false"/>

    <field name="title" type="string" indexed="true" stored="true" />
    <field name="content" type="string" indexed="true" stored="true" />
    <field name="latitude" type="string" indexed="true" stored="true" />
    <field name="longitude" type="string" indexed="true" stored="true" />
    <field name="attachment" type="string" indexed="true" stored="true" />

    <field name="clue_status" type="int" indexed="true" stored="true" />
    <field name="del_flag" type="int" indexed="true" stored="true" />
    <field name="gmt_create" type="date" indexed="true" stored="true" />
    <field name="create_uid" type="long" indexed="true" stored="true" />
    <field name="gmt_modified" type="date" indexed="true" stored="true" />
    <field name="modified_uid" type="long" indexed="true" stored="true" />

    <!--<field name="id" type="string" indexed="true" stored="true"  multiValued="false" />-->
    <field name="_version_" type="long" indexed="true" stored="false"/><!--已存在-->
    <field name="_root_" type="string" indexed="true" stored="false" docValues="false" /><!--已存在-->    <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/><!--已存在-->

PS:managed-schema是schema.xml文件的一个管理文件,schema.xml文件中的数据会被写入到managed-schema中去,如果出现运行异常的话(从日志中查看),可以检查该文件。

步骤5:

启动tomcat,并在URL中输入http://127.0.0.1:8080/solr/index.html路径。选择Core admin 输入如下设置:

将managed-schema改成schema.xml(应该是要改的)

设置好之后,点击Add Core按钮,进行设置,设置成功后,再core Selector选择刚刚添加的mynode。

选择刚刚添加的goods实体进行索引操作:我们这儿可以选择full-import或者delta-import(增量索引),选择增量索引需要把clean的勾给去掉,不然会清除之前的,增量的索引的初衷是对新增或者修改的记录重新索引,会追加到原有的索引文件当中。当我们选择full-import的时候,最好就是把原有的索引文件给清空重新索引。

索引成功如下如所示:

配置过程中出现的问题

1、找不到mysql驱动。解决方式:步骤2中加入mysql驱动包。

2、miss unqiue id 以及miss clue_id... 将data_config.xml里面的字段name与schema.xml里面字段对应,然后检查managed-schema里面的字段是否包含schema.xml中字段,是否存在重复。

3、数据导入进去却查询不出来,多重启几次服务器。

下一篇介绍查询与字段配置的东东。。科科。

时间: 2024-08-17 20:49:02

我与solr(二)--导入mysql数据库的相关文章

solr 4.8+mysql数据库数据导入 + mmseg4j中文全文索引 配置笔记

1.如何将solr部署,请参考之前的文章 2.按上述配置好后,在solr_home文件夹中,将包含collection1文件夹,这就是solr的一个实例.下面我们来看看collection1中的文件内容. collection1中包含conf和data两个子文件夹.data中包含tlog和index(如果没有也没关系,稍后再solr建立索引时,将会被创建).tlog是记录日志的文件夹,index是存放索引的文件夹.conf中包含lang文件夹和若干文件.lang文件夹中包含的是词库文件,但是so

将Excel数据导入mysql数据库的几种方法

将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面和大家分享一下: 一.用java来将Excel表格中的数据转到mysql中 这是我们用的第一种方法,就是在java找你感谢个类,然后这个类会将Excel表格中的数据存储到内存里,然后再从内存中读出来插入到数据库中,但是要 注意了,这里是存储到String[ ]数组里面,所以取出来的数据也是Strin

用命令行导出和导入MySQL数据库

php 用命令行导出和导入MySQL数据库 命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files\MySQL\MySQL Server 4.1\bin2,导出数据库:mysqldump -u 用户名 -p 数据库名 > 导出的文件名 如我输入的命令行:mysqldump -u root -p news > news.sql   (输入后会让你输入进入MySQL的密码)(如果导出单张表的话在数据库

PowerDesigner逆向工程导入MYSQL数据库总结

由于日常数据建模经常使用PowerDesigner,使用逆向工程能更加快速的生成模型提高效率,所以总结使用如下: 1.????? 安装MYSQL的ODBC驱动 Connector/ODBC 5.1.10 下载地址:http://dev.mysql.com/downloads/connector/odbc/5.1.html 对了,在这里我要强调的是如果 你系统是window7 ,64位应该下载64位的,我之前试过了,装32位不行,呵呵 点击后就跳转到这个页面,我这个谷歌浏览器自动翻译中文,其他浏览

【MySQL笔记】Excel数据导入Mysql数据库的实现方法——Navicat

很多公司尤其有点年头的公司,财务业务部门的各种表单都是excel来做的表格,随着互联网的发展各种业务流程都电子化流程化了,再在茫茫多的文档中去查找某一个年份月份的报告是件相当枯燥的事,所以都在想办法将以前的数据直接导入现代智能化的办公程序道中,在这里可能很多初级程序员都会有些挠头不知所措,下面来介绍下我的小经验,希望能为大家提供便利! 工具/原料 首先做一下说明,为什么我要用Navicat,第一个原因,因为它是个不错的Mysql GUI工具,更重要的是,它可以将一些外部数据源导入Mysql数据库

mysql数据库 (二) mysql数据库的基本操作

上一次安装好mysql数据库以后并没有登录操作,这次来简单介绍下mysql的基本操作 一.访问mysql数据库(经过安装后的初始化过程,mysql数据库的默认管理员用户名为:"root",密码为空:注意此root并非是linux系统管理员的root账号) 1.登录mysql 未设置密码时,mysql后加"-u"指定用户就可以了 如果root设置了密码,还需要在用户名后面加"-p"选项指定密码 2.执行mysql操作语句 注意:每一条mysql语句

sql语句备份/导入 mysql数据库或表命令

sql语句备份/导入 mysql数据库或表命令,布布扣,bubuko.com

Python将JSON格式数据转换为SQL语句以便导入MySQL数据库

前文中我们把网络爬虫爬取的数据保存为JSON格式,但为了能够更方便地处理数据,我们希望把这些数据导入到MySQL数据库中.phpMyadmin可以把MySQL数据库中的数据导出为JSON格式文件,但却不能把JSON格式文件导入到MySQL数据库.为了实现这个目标,可以编写Python脚本将JSON格式数据转换为SQL语句以便导入MySQL数据库. JSON文件tencent.json部分内容: {"recruitNumber": "1", "name&qu

把后缀.frm,.myd,myi转换为.sql导入mysql数据库

用本地的MySQL数据库将这些文件转换为.sql脚本 1.安装MySQL,版本和字体要与服务器一致,否则乱码. 2.用 CREATE DATABASE NAME; 命令创建数据库 MySQL的data就有NAME文件夹 3.把*.frm,*.myd,*.myi文件copy到data文件夹下. 4.cmd 进到MySQL的bin目录下,用命令导出.sql脚本 mysqldump -u username -p password NAME > D:/NAME.sql 将NAME数据库导出到D盘并生成N