solr添加链接数据库的配置jar包,和链接数据库,导入数据

一、下载“mysql-connector-java-8.0.19.jar

下载地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.19

二、将下载的“mysql-connector-java-8.0.19.jar” 和“solr-8.5.0/dist”里的两个文件“solr-dataimporthandler-8.5.0.jar” 和“solr-dataimporthandler-extras-8.5.0.jar”,放入“solr-8.5.0/server/solr-webapp/webapp/WEB-INF/lib”文件夹里。

三、在solr-8.5.0/server/solr/test/conf里的solrconfig.xml   添加如下配置

    <!-- mysql导入增加的包开始--> 
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-.*\.jar" /> 
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" /> 
<!-- mysql导入增加的包结束-->

四、导入数据库中的数据到Solr中

1、创建data-config.xml文件
在solr-8.5.0/server/solr/new_core/conf目录下创建一个文件data-config.xml,与solrconfig.xml同级
2、修改solrconfig.xml文件
修改solr-8.5.0/server/solr/new_core/conf/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>
其中<str name="config"></str>里的内容就是我们在上一步创建的data-config.xml文件,将它们关联起来。

3、修改data-config.xml文件

接下来我们打开data-config.xml文件,配置相关的数据库属性,即我们要导入那张表的哪些字段,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <dataSource name="source1" type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://10.10.9.103:3306/alvins"
              user="root"
              password="****"
              batchSize="-1" />
    <document>
        <entity name="article" dataSource="source1" pk='id'
            query="SELECT id,title,desc,keywords,thumb,author,cateid,click,zan,time FROM bk_article">

            <field column='id' name='id' />
            <field column='title' name='title' />
            <field column='desc' name='desc' />
            <field column='keywords' name='keywords' />
            <field column='thumb' name='thumb' />
            <field column='author' name='author' />
            <field column='cateid' name='cateid' />
            <field column='click' name='click' />
            <field column='zan' name='zan' />
            <field column='time' name='time' />
        </entity>
    </document>
</dataConfig>
dataSource 中,url是你要访问的数据库路径,我这里指定到我的alvins数据库。user是用户名,password是你的数据库密码。

entity 对应于数据库中的数据库表,此处为 article表;

pk是主键

query是一个sql语句,你需要导入哪张表的哪些字段,查就行了。然后<field>标签中的column属性是你SQL语句中查询的字段,跟数据库中对应;name属性是你给它起的一个别名,应该是必须指定的(本人没试过不指定的结果),至于name属性是干嘛的,继续往下操作,自然会明白。有多个查询字段就需要有多个<field>标签,每一个<field>标签对应一个字段。


document配置数据库查询语句与managed_schema域的对应关系。目的是,在core导入数据的时候,会先通过该配置信息链接到数据库通过查询语句把数据查询出来,通过数据库字段与managed_schema域关联关系创建索引

4、修改managed-schema文件

solr文档地址:https://lucene.apache.org/solr/guide/8_5/field-type-definitions-and-properties.html

或:https://www.w3cschool.cn/solr_doc/solr_doc-jmqv2fzk.html

修改solr-8.5.0/server/solr/new_core/conf/managed-schema文件,将刚才在data-config.xml中配置的<field>标签添加进来。

<!-- 自己的导入的字段 -->
   <field name="id" type="string" required="true" indexed="true" stored="true" />
    <field name="title" type="text_cn" indexed="true" stored="true" multiValued="false" />
    <field name="keywords" type="text_cn" indexed="true" stored="true" multiValued="false" />
    <field name="thumb" type="string" indexed="true" stored="true" multiValued="false" />
    <field name="author" type="string" indexed="true" stored="true" multiValued="flase" />
    <field name="cateid" type="pints" indexed="true" stored="true" multiValued="false" />
    <field name="click" type="pint" indexed="true" stored="true"  />
    <field name="zan" type="pint" indexed="true" stored="true" />
    <field name="time" type="string" indexed="true" stored="true"  />
这里<field>里的name属性值,就是我们刚才在data-config.xml中<field>标签的name属性值,这是name属性的第一个用途,关联起来。
name:是这个域的名称,在整个managed_schema文件里面需要唯一,不能重复,这里定义成跟数据库表字段的名称,方便使用。当然,也可以定义成其他名字。
type:是表示这个字段的类型是什么,string是字符串类型,int是整形数据类型,date是时间类型,相当于数据库里面的timestamp。
indexed:表示是否索引,索引的话就能查询到,否则,搜索的时候,不会出现。
stored:表示是否存储到索引库里面。
required:是否必须

multiValued:是否多值,比如商品信息中,一个商品有多张图片,一个Field想存储多个值的话,必须将multiValued设置为true

重启slor。

、导入数据

再次访问我们刚才的页面,在左侧找到我们部署好的test工程,点击Dataimport,再选择full-import(全部导入),点击Execute,出现下面的页面,证明这张表的数据已经导入进来了。

注意:如果出现这种无法插入数据的情况


在data-config.xml 的url数据库链接后面添加:?serverTimezone=UTC&amp;tinyInt1isBit=false

问题:solr配置mysql数据库后,主键类型是int,启动报错

报错内容:



要看你 数据表的 int ,因为slor里没有int 所以 在id的type类型为:‘pint’,solt里的int对应的pint或者plong。主键id 不要用pint,必须是string才不报错

如果你数据表里的time设置为varchar 那么在managed-schema.xml你的time字段也得是string.

是在在不到,原因,就一个一个字段的去添加,就找到问题所在了。

重启solr正常启动了

本文由37°5【https://www.alvinxiao.comhttps://blog.alvinxiao.com原创,转载请注明来源。请注意原创和打造和谐的网络环境,谢谢!

分享到: