常用命令:
>命令
终止、增量、全量、重新加载DIH配置、查询状态,返回文档创建数,文档删除数等状态信息
http://localhost:8389/solr/book/dataimport?command=abort
http://localhost:8389/solr/book/dataimport?command=delta-import
http://localhost:8389/solr/book/dataimport?command=full-import
http://localhost:8389/solr/book/dataimport?command=reload-config
http://localhost:8389/solr/book/dataimport?command=status
>参数
command full-import/delta-import/status/reload-config/abort 全量导入 / 增量导入 / 导入状态 / 重新加载配置文件 / 中止导入
verbose true/false 输出详细步骤
clean true/false 删除原有索引
commit true/false 导入后是否提交
optimize true/false 导入后是否优化索引
debug true/false 调试模式,不会提交数据
entity 与db-data-config.xml中定义的entity对应 所要导入的entity
start 整数 调试模式用,开始的记录数
rows 整数 调试模式用,导入的记录数
>全量删除:
<delete><query>*:*</query></delete><commit/>
>Entity属性:
pk="ID" 这个很有必要,因为其中的增量索引查询主键ID时需要
dataSource="mydb" 这个引用名字是引用上面数据源的名字
name="myinfo" 这个名字必须唯一,存在多个实体时
query="select * from myinfo WHERE isdelete=0"
query查询是指查询出表里所有的符合条件的数据,因为笔者测试的有删除业务,所以where后面有一个限定条件isdelete=0,意思为查询未被删除的数据
(注意这个query查询只对第一次全量导入有作用,对增量导入不起作用)
deltaQuery="select ID from myinfo where my_date > '${dataimporter.last_index_time}'"
deltaQuery的意思是,查询出所有经过修改的记录的ID可能是修改操作,添加操作,删除操作产生的此查询只对增量导入起作用,而且只能返回ID值)
deletedPkQuery="select ID from myinfo where isdelete=1"
此操作值查询那些数据库里伪删除的数据的ID(即isdelete标识为1的数据)
solr通过它来删除索引里面对应的数据
(此查询只对增量导入起作用,而且只能返回ID值)
deltaImportQuery="select * from myinfo where ID='${dataimporter.delta.ID}'"
此查询是获取以上两步的ID,然后把其全部数据获取,根据获取的数据
对索引库进行更新操作,可能是删除,添加,修改
(此查询只对增量导入起作用,可以返回多个字段的值,一般情况下,都是返回所有字段的列)
parentDeltaQuery是获取父Entity的pk的SQL
>DIH具体配置:
1. solr create -c reader
2. cd solr-7.4.0\server\solr\reader\conf
3. solrconfig.xml中添加
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
4. 创建db-data-config.xml
<dataConfig>
<dataSource type="JdbcDataSource"
name="ds-1"
driver="org.postgresql.Driver"
url="jdbc:postgresql://x.x.x.x:5432/xxxx"
user="xxxx"
password="xxxx"/>
<document>
<entity dateSource="ds-1" name="reader" pk="dzid"
query="select dzid,xming,dzzhao,picture,optime from lt_dzheinfo"
deltaQuery="select dzid from lt_dzheinfo where optime > '${dih.last_index_time}'"
deletedPkQuery="select dzid from lt_dzheinfo where ztai != '正常'"
deltaImportQuery="select * from lt_dzheinfo where dzid = '${dih.delta.dzid}'"
>
<field column="dzid" name="id"></field>
<field column="xming" name="xming"></field>
<field column="dzzhao" name="dzzhao"></field>
<field column="picture" name="picture"></field>
<field column="optime" name="optime"></field>
</entity>
</document>
</dataConfig>
5. 定义solr创建DB所用字段(schema中缺少的),打开managed-schema文件
<field name="xming" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="dzzhao" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="picture" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<field name="optime" type="pdate" indexed="true" stored="true" required="true" multiValued="false" />
>定时DIH配置:
1. 添加依赖包:
下载solr-dataimportscheduler.jar包放入solr-7.4.0\server\solr-webapp\webapp\WEB-INF\lib下
(文件下载:https://download.csdn.net/download/weixin_38289303/12005671)
2. 修改web.xml文件,添加监听器:
solr-7.4.0\server\solr-webapp\webapp\WEB-INF\web.xml添加如下配置
<listener>
<listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
</listener>
3. 查看日志:solr-7.4.0\server\logs\solr.log。添加指定的文件到指定目录。
新建文件:solr-7.4.0\server\solr\conf\dataimport.properties(若没conf目录,自己创建)。
dataimport.properties文件内容:
#################################################
# #
# dataimport scheduler properties #
# #
#################################################
# to sync or not to sync
# 1 - active; anything else - inactive
syncEnabled=1
# which cores to schedule
# in a multi-core environment you can decide which cores you want syncronized
# leave empty or comment it out if using single-core deployment
syncCores=reader
# solr server name or IP address
# [defaults to localhost if empty]
server=localhost
# solr server port
# [defaults to 80 if empty]
port=8983
# application name/context
# [defaults to current ServletContextListener's context (app) name]
webapp=solr
# URL params [mandatory]
# remainder of URL
#刚才增量的参数
params=/dataimport?command=delta-import&commit=ture&wt=json&indent=true&entity=reader&clean=false
# schedule interval
# number of minutes between two runs
# [defaults to 30 if empty]
#一分钟执行一次
interval=1
# 重做索引的时间间隔,单位分钟,默认7200,即5天;
# 为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=10080
# 重做索引的参数
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
# 重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
# 两种格式:2012-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00
4. 测试成功!