安装目录假设为#solr_home,本文的#solr_home为apps/svr/solrhtml
1、Oracle数据导入web
1. 在#solr_home/server/solr下新建文件夹,假设为mjd;数据库
2. 将#solr_home/server/solr/configsets/_default下的conf文件夹拷贝到#solr_home/server/solr/mjd;apache
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. 一样上面那个文件,增长节点;oracle
<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中下载的;app
6. 在#solr_home/server/solr/mjd/conf下新建文件data-config.xml,打开,将下列配置复制;less
<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设置为刚才咱们第一步新建的文件夹名称;curl
8. 在菜Thread Dump下方有一个下拉框,选择刚新建的Core,点击Schema 里的Add field菜单,name输入刚才配置的查询语句中的某个字段(假设该字段为字符串类型),点击field type,选择text_gerneral,点击下面的添加按钮;webapp
9. 回到左侧菜单,选择Dataimport,点击Execute菜单;
10. 回到左侧菜单,选择Query,点击Execute Query,若是右侧查询出数据,恭喜你,你已经配置好了;
可根据第八步继续添加本身想要的字段,重复9 10步骤;
2、中文分词
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中配置,
参考资料:
http://www.javashuo.com/article/p-ofqfipgl-c.html
http://archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-7.0.pdf
https://wiki.apache.org/solr/DataImportHandler
本文原创,转载请注明出处。