solr8学习进阶(一)MySql整合

本文基于2019.10.25的solr最新版本solr-8.2.0

一、配置MySql连接

1、修改配置文件

第一步,修改core下的conf目录中的solrconfig.xml文件。

这里appDbDisasterShelter是我建立的core,之前有详细讲解过这里就不多说了。例如:D:\solr-8.2.0\server\solr\appDbDisasterShelter\conf。添加如下配置:

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
        <str name="config">data-config.xml</str>
    </lst>
</requestHandler>
第二步,将连接MySql以及solr导入数据所需要的资源包导入到lib中
  • 从solr的源码包的dist目录下(例如,D:\solr-8.2.0\dist)取出两个jar包,solr-dataimporthandler-8.2.0.jar、solr-dataimporthandler-extras-8.2.0.jar;
  • mysql-connector-java-5.1.34.jar这个jar包自己去网上下载一个,网上找找就有了。
  • 把上述三个jar包放到solr的WEB-INF\lib目录下。例如,D:\solr-8.2.0\server\solr-webapp\webapp\WEB-INF\lib

二、配置core的属性,建立数据库映射

1、修改core下的conf目录中的data-config.xml文件。

例如:D:\solr-8.2.0\server\solr\appDbDisasterShelter\conf,这里appDbDisasterShelter是我建立的core。添加如下配置:

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
    <!-- 数据库信息 -->
    <dataSource type="JdbcDataSource" 
        driver="com.mysql.jdbc.Driver" 
        url="jdbc:mysql://192.168.1.160:3306/emplus_eos" 
        user="emt" password="chinaemt"/>
    <document>
        <!-- document实体 name为数据库表;pk为managed-schema文件中定义的<uniqueKey>id</uniqueKey> -->
        <entity name="app_db_disaster_shelter" pk="id" 
        	<!--  这里只查询数据库中我所需要的字段 -->
        	query="SELECT `i_id` as id,
  				`vc_name` as vcName,
  				`d_longitude` as x,
				`d_latitude` as y,
 				`vc_address` as vcAddress,
  				`vc_remark` as vcRemark,
  				concat( d_longitude,' ',d_latitude) as GEO
  				FROM app_db_disaster_shelter where sys_i_status=0"
  			<!-- deltaQuery、deletedPkQuery、deltaImportQuery三个方法是用于定时增量同步数据库,这里暂时不讲解,留到后面  -->
  			deltaQuery="SELECT `i_id` AS `id` FROM `app_db_disaster_shelter` where sys_i_status=0 and 
  			 	sys_dt_last_update>'${dataimporter.last_index_time}'"
			deletedPkQuery="SELECT `i_id` AS `id` FROM `app_db_disaster_shelter` where sys_i_status!='0'"
			deltaImportQuery="SELECT `i_id` as id,
  				`vc_name` as vcName,
  				`d_longitude` as x,
  				`d_latitude` as y,
  				`vc_address` as vcAddress,
  				`vc_remark` as vcRemark,
  				concat( d_longitude,' ',d_latitude) as GEO
  				from app_db_disaster_shelter where sys_i_status=0  and i_id='${dataimporter.delta.id}'">
            <!-- 数据库字段映射solr字段 也可以不写,写出来是为了结构清晰,数据库字段和core的属性一一对应 -->
            <field column="i_id" name="id"/>
            <field column="vc_name" name="vcName"/>
            <!-- <field column="i_area_id" name="iAreaId"/> -->
            <!-- <field column="vc_dept" name="vcDept"/> -->
            <field column="d_longitude" name="x"/>
            <field column="d_latitude" name="y"/>
            <field column="vc_address" name="vcAddress"/>
            <!-- <field column="vc_traffic" name="vcTraffic"/> -->
            <!-- <field column="vc_duty_tel" name="vcDutyTel"/> -->
            <!-- <field column="vc_fax" name="vcFax"/> -->
            <!-- <field column="vc_dept_address" name="vcDeptAddress"/> -->
            <!-- <field column="vc_group" name="vcGroup"/> -->
            <!-- <field column="dt_update_time" name="dtUpdateTime"/> -->
            <field column="vc_remark" name="vcRemark"/>
            <!-- <field column="dt_use_time" name="dtUseTime"/> -->
            <!-- <field column="vc_basic_situation" name="vcBasicSituation"/> -->
            <!-- <field column="d_area" name="dArea"/> -->
            <!-- <field column="i_dept_id" name="iDeptId"/> -->
            <!-- <field column="i_operate_id" name="iOperateId"/> -->
            <!-- <field column="i_status" name="iStatus"/> -->
            <!-- <field column="i_extend1" name="iExtend1"/> -->
            <!-- <field column="i_extend2" name="iExtend2"/> -->
            <!-- <field column="vc_extend1" name="vcExtend1"/> -->
            <!-- <field column="vc_extend2" name="vcExtend2"/> -->
            <!-- <field column="vc_extend3" name="vcExtend3"/> -->
            <!-- <field column="sys_i_status" name="sysIStatus"/> -->
            <!-- <field column="sys_dt_create" name="sysDtCreate"/> -->
            <!-- <field column="sys_i_create_user" name="sysICreateUser"/> -->
            <!-- <field column="sys_dt_last_update" name="sysDtLastUpdate"/> -->
            <!-- <field column="sys_i_last_update_user" name="sysILastUpdateUser"/> -->
            <!-- <field column="sys_vc_remark" name="sysVcRemark"/> -->
            <!-- <field column="i_datasync_unit_id" name="iDatasyncUnitId"/> -->
            <!-- <field column="dt_datasync_time" name="dtDatasyncTime"/> -->
            <!-- <field column="i_datasync_id" name="iDatasyncId"/> -->
            <!-- <field column="origin" name="origin"/> -->
        </entity>
    </document>
</dataConfig>

2、修改core下的conf目录中的managed-schema文件。

例如:D:\solr-8.2.0\server\solr\appDbDisasterShelter\conf,这里appDbDisasterShelter是我建立的core。添加如下配置:

<!-- name为属性,要和data-config.xml文件中定义的field的name属性一致;type从fieldType的name属性中选择,stored-是否存储;required-是否必须;multiValued-是否多值 -->
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="vcName" type="text_cn" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="x" type="string" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="y" type="string" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="vcAddress" type="string" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="vcRemark" type="string" indexed="true" stored="true" required="false" multiValued="false"/>
<field name="GEO" type="location_rpt" indexed="true" stored="true" required="false" multiValued="false"/>

注意:除了id属性以外,其他属性的required应定义为false,否则数据库字段数据为空时solr会报错

3、报错解决:

实操的时候可能会遇见的问题:
报错:org.apache.solr.common.SolrException: [doc=15378] missing required field: vc_other_tel2
原因:solr导入数据时遇到数据库对应字段的数据为空,解决办法:除主键以外的字段应定义:required=“false”

三、导入数据、测试solr查询

打开solr的主页面,http://ip:port/solr/#/,ip为solr服务所在地址,port为solr服务启动端口,默认8983。

1、dataimport导入数据

步骤我放到截图里
在这里插入图片描述
注意:clear复选框表示导入数据并删除solr中有而数据库中不存在的数据

2、Query查询数据

步骤放到截图里
在这里插入图片描述
简单介绍一下几个常用查询参数:

  • “q”:the quert string,即查询条件,":"表示查询所有内容,支持多个查询条件。
  • “fq”:fiter query,即过滤查询,使用Filter Query可以充分利用FilterQuery Cache,提高检索性能。个人觉得可能更多时候用来做区间查询。
  • “sort”:sort field or function asc|desc,即根据指定field进行排序。
  • “start,rows” Start配置第一条数据初始位置,Rows配置返回结果条数记录。
  • “fl”:field list,就是查询结果显示field,多个field用逗号分割。
  • “df” default search field,默认查询field。
  • “Raw Query Parameters”:就是所有的查询条件,只是查询参数是在URL上而已。
  • “wt”: the wite type,即查询结果的显示形式,支持多种个数,json、xml、python、ruby、csv等,最常用的可能还是json或者xml吧。

上面这个几个都是比较常用的查询条件,其他的还有一些,就不再介绍了。

到此,solr导入MySql数据完成。

如果中间出了问题,可以查看solr的日志文件,solr8的日志放在这个文件夹下D:\solr-8.2.0\server\logs
在这里插入图片描述


相关的源代码都放在这里:solr整合mysql的实战
上一篇:solr8学习入门(三)创建core,配置中文分词器
下一篇:solr8学习进阶(二)整合springboot实现空间资源搜索

发布了96 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_26356861/article/details/102746230
今日推荐