Solr7使用Oracle数据源导入+中文分词

安装目录假设为#solr_home,本文的#solr_home为apps/svr/solr

 一、Oracle数据导入

1. 在#solr_home/server/solr下新建文件夹,假设为mjd;

2. 将#solr_home/server/solr/configsets/_default下的conf文件夹拷贝到#solr_home/server/solr/mjd;

3.打开mjd/conf下的solrconfig.xml添加节点;

<lib dir="${solr.install.dir:../../../..}/contrib/dataimporthandler/" regex=".*\.jar">
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar">

4. 同样上面那个文件,增加节点;

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

5. 下载ojdbc6.jar到#solr_home/contrib/dataimporthandler/中,我是在http://vdisk.weibo.com/s/z8ZZMoqsgpNFH中下载的;

6. 在#solr_home/server/solr/mjd/conf下新建文件data-config.xml,打开,将下列配置复制;

<dataConfig>
    <dataSource driver="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@192.168.2.218:1521:product " user="数据库用户名" password="数据库密码" />
    <document name=”product” pk=”主键”>
        <entity name="bless" query="select * from bless"<--这里配查询语句-->
deltaImportQuery="SELECT * FROM userinfo where spuid='${dih.delta.spuid}'" 
                deltaQuery="select bless_id from bless where bless_time > '${dataimporter.last_index_time}'"><--这里配增量查询语句,${dataimporter.last_index_time}表示上次更新时间-->
        </entity>
    </document>
</dataConfig>

7. 进入web管理页面 localhost:8983/solr/#,点击Core Admin菜单,点击AddCore,将name和instanceDir设置为刚才我们第一步新建的文件夹名称;

8. 在菜Thread Dump下方有一个下拉框,选择刚新建的Core,点击Schema 里的Add field菜单,name输入刚才配置的查询语句中的某个字段(假设该字段为字符串类型),点击field type,选择text_gerneral,点击下面的添加按钮;

9. 回到左侧菜单,选择Dataimport,点击Execute菜单;

10. 回到左侧菜单,选择Query,点击Execute Query,如果右侧查询出数据,恭喜你,你已经配置好了;

可根据第八步继续添加自己想要的字段,重复9 10步骤;

二、中文分词

Solr7之前好像大部分使用的是IK中文分词器,但是我试了好几个方法,都没有成功,而且跟网上经验描述的目录结构也很多不一样,比如大部分说要修改Schema.xml文件,可是后来发现Solr7其实已经不使用Schema了,而是使用的Managed-Schema文件,

而且这里有个问题就是,当重启Solr服务器后,项目中的这个文件会被覆盖掉,目前还没有找到是从哪里拷贝过来的模板。进入正题:

1. 进入#solr_home/contrib/analysis-extras/lucene-libs,找到lucene-analyzers-smartcn-7.0.1.jar,复制到#solr_home/server/solr-webapp/webapp/WEB-INF/lib下;

2. 打开#solr_home/server/solr/configsets/_default/conf下的managed-schema,在文件后面加上如下节点

<!-- ChineseAnalyzer -->
    <fieldType name="text_cn_splitting" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      </analyzer>
    </fieldType>

 3.重启solr服务;

4.在第一部分第8步的时候,Add Field的时候,看是否有text_cn_splitting类型可选,如果有的话,那在add field的时候将需要进行中文分词的字段选择该类型即可;

 定时任务:

使用系统的定时任务执行 curl

http://your_ip/dataimport?command=full-import&clean=true&commit=true 全量导入

http://your_ip/dataimport?command=delta-import&clean=false&commit=true 差异导入

这里clean参数如果是true,会把之前的数据清空掉,然后导入差异的数据,在差异性导入时注意这个参数,不然会把solr里的数据清空,然后导入差异性的数据(这个差异是清空前的差异),导致数据缺失;

建议访问低频时重建全量索引,如每天凌晨4点做一次全量导入,每10分钟做一次差异导入

FQA:

1.增量导入是以主键作为增量差异,默认这个主键是id,需要在managed-schema里修改uniqueKey节点成需要的主键,且在该文件里定义的主键必须是string类型的,如下图

 2. 如果需要设置单字段索引,而不每个字段都去检索,比如有数据字段author,title,keywords,body,搜索的时候想搜索这四个字段,可以使用copyField字段,具体方法,在managed-schema中添加如下节点

3. Solr7中已经不再支持defaultSearchField默认搜索字段了。需要设置默认搜索字段需要在solrconfig.xml中配置,

参考资料:

https://www.cnblogs.com/LUA123/p/7783102.html

http://archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-7.0.pdf

https://wiki.apache.org/solr/DataImportHandler

本文原创,转载请注明出处。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

Demo入门Mycat【面试+工作】

Mycat是一个开源的分布式数据库系统,是一个实现了MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而...

27040
来自专栏CaiRui

xtrabackup使用

转自:https://www.cnblogs.com/waynechou/p/xtrabackup_backup.html 阅读目录 xtrabackup 选项...

692100
来自专栏北京马哥教育

MySQL开源热备工具XtraBackup的原理与程序说明

XtraBackup是Percona发布的MySQL开源热备工具,可以在尽量不影响线上读写的情况下进行快速全备、增备。支持InnoDB, XtraDB, 和My...

34950
来自专栏散尽浮华

Mysql数据库之Binlog日志使用总结

binlog二进制日志对于mysql数据库的重要性有多大,在此就不多说了。下面根据本人的日常操作经历,并结合网上参考资料,对binlog日志使用做一梳理: 一、...

2.3K90
来自专栏深度学习之tensorflow实战篇

MYSQL数据导出与导入,secure_file_priv参数设置

MySQL 报错 [Code: 1290, SQL State: HY000] The MySQL server is running with the –...

63550
来自专栏吴伟祥

分布式锁的几种实现方式~ 转

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一...

40110
来自专栏知无涯

使用PHP调用SQL SERVER 2008及以上版本的方法

41080
来自专栏一枝花算不算浪漫

Redis的介绍及使用实例.

38290
来自专栏Java3y

Mysql免安装配置教程(图文版)

Mysql免安装版配置教程 图文版 配置环境变量 ? 新建一个my.ini文件,添加下面内容 [mysqld] basedir=C:\\soft...

39450
来自专栏python全栈布道师

django+vue环境搭建

npm install -g cnpm --registry=https://registry.npm.taobao.org

49380

扫码关注云+社区

领取腾讯云代金券