目录
4. Solr的solrconfig.xml配置与managed.schema模式
5. Solr Admin UI操作(XML、JSON 新增|修改|删除|查询 索引)
6. Solr配置DataImport导入索引数据、IK分词查询
7. Java中使用Solr,历史版本(7.0.0之后、5.0.0~6.6.6、4.10.4之前)
Solr配置DataImport导入索引数据
Solr配置DataImport导入索引数据
DataImportHandler就是提供一种可配置的方式向solr导入数据,可以一次全部导入,也可以增量导入,还可以声明式提供可配置的任务调度,让数据定时的从关系型数据库更新数据到solr服务器
1.配置jar包(3个)
solr-dataimporthandler-extras-版本.jar、solr-dataimporthandler-版本.jar(dist文件中)
mysql-connector-java-版本.jar(Maven库下载)
将以上三个jar导入至\server\solr-webapp\webapp\WEB-INF\lib中
2.修改添加core实例配置文件(需要更改三个位置)
(1)solrconfig.xml文件,添加requestHandler配置
指向一个自定义文件:data-config.xml,顾名思义,是配置相关数据源的
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
(2)新建data-config.xml文件,添加配置
\Solr\solr-8.5.1\server\solr\mycore\conf
MySQL5用的驱动url是com.mysql.jdbc.Driver,MySQL6以后用的是com.mysql.cj.jdbc.Driver。版本不匹配便会报驱动类已过时的错误
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/yiyun_mall?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=UTC"
user="root"
password="root"/>
<document name="salesDoc">
<entity name="o_item" query="select id,title,sell_point,price,image,cid,created,updated from yy_item" >
<field name="id" column="id" />
<field name="title" column="title" />
<field name="sell_point" column="sell_point" />
<field name="price" column="price" />
<field name="image" column="image" />
<field name="cid" column="cid" />
<field name="created" column="created" />
<field name="updated" column="updated" />
</entity>
</document>
</dataConfig>
<dataSource>
参数 | 描述 |
---|---|
name | dataSource的名称,配置文件可以有多个datasource,使用name区分 |
type | 数据源类型,如JDBC |
driver | 数据库驱动包,提前放到lib目录下 |
url | 数据库连接url |
user | 数据库用户名 |
password | 数据库密码 |
<doucment>
用来配置如何从数据库导入数据构建document对象,主要有一个或多个<entity>即实体组成
<doucment>子元素<entity>属性
参数 | 描述 |
---|---|
name | 实体名称 |
dataSource | dataSource名称 |
query | 获取全部数据的SQL |
deltaImportQuery | 获取增量数据时使用的SQL |
deltaQuery | 获取pk的SQL |
parentDeltaQuery | 获取父Entity的pk的SQL |
<entity>子元素<field>
参数 | 描述 |
---|---|
name | Schema.xml中的字段 |
column | 数据库查询列名称 |
(3)修改schema.xml文件,添加在data-config中定义的字段
如果已经存在如id、name,则可不用重新添加
<!-- 自带ID -->
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_ik" indexed="true" stored="true"/>
<field name="sell_point" type="string" indexed="true" stored="true"/>
<field name="price" type="pdouble" indexed="true" stored="true"/>
<field name="image" type="string" indexed="true" stored="true"/>
<field name="cid" type="pint" indexed="true" stored="true"/>
<field name="created" type="pdate" indexed="true" stored="true"/>
<field name="updated" type="pdate" indexed="true" stored="true"/>
3.全量或者增量导入数据
启动solr。选择mycore,选择dataimport命令界面
命令参数 | 描述 |
---|---|
clean | 决定在建立索引之前,删除以前的索引 |
commit | 决定这个操作之后是否要commit |
optimize | 决定这个操作之后是否要优化 |
可以选择是全量导入还是增量导入,并且选择配置好的实体(entity的name)
全量导入
所谓全量索引一般指的是每次从数据库中读取需要导入的全部数据,然后提交到Solr Server,最后删除指定core的所有索引数据进行重建。全量导入一般在数据首次导入或者备份数据恢复时执行
Full Import(全量导入)工作原理
(1)执行本Entity的Query,获取所有数据
(2)针对每个行数据Row,获取pk,组装子Entity的Query
(3)执行子Entity的Query,获取子Entity的数据
增量导入
如果要使用增量导入,前提表必需有两个字段,一个是删除标志字段即逻辑删除标志:isdeleted,另一个则是数据创建时间字段:create_date,字段名称不一定非得是isdeleted和create_date,但必须要包含两个表示该含义的字段。根据数据创建时间跟上一次增量导入操作时间一对比,就可以通过SQL语句查询出需要增量导入的数据,根据isdeleted字段可以查询出被标记为删除的数据,这些数据的ID主键需要传递给solr,这样solr就能同步删除索引中相关Document,实现数据增量更新。如果数据表里的数据都是物理删除,没有逻辑标志字段的话,那么找出已删除的数据显得比较困难,所以这就是需要逻辑删除标志字段的原因。
Delta Import(增量导入)工作原理
(1)查找子Entity,直到没有为止;
(2)执行Entity的deltaQuery,获取变化数据的pk;
(3)合并子Entity parentDeltaQuery得到的pk;
(4)针对每一个pk Row,组装父Entity的parentDeltaQuery;
(5)执行parentDeltaQuery,获取父Entity的pk;
(6)执行deltaImportQuery,获取自身的数据;
(7)如果没有deltaImportQuery,就组装Query
4.Execute执行之后
等待一会然后刷新一下。可以再Overview中查看
分词查询
field#type必须指定分词器