最近在学习solr搜索,在win7下搭建一个单机版的solr,并将ikanalizer中文分词器配置进去
参考文章:Centos7下单机部署Solr7.3
1、准备工作
下载apache-tomcat-8.5.30,solr-7.3.0.tgz,Jdk1.8
下载路径:链接:https://pan.baidu.com/s/1vk8Rs5c2ZsTuRFobHhjgBA 密码:9b6b
2、tomcat部署solr7
1)解压solr7,进入solr7解压后的目录(C:\Users\Administrator\Downloads\solr-7.3.0),复制并重命名solr-7.3.0目录里的server/solr-webapp/webapp文件夹到tomcat的webapps目录为solr7。
2)将server/lib/ext/ 文件夹下的所有jar复制到 D:\Program Files\apache-tomcat-8.5.30\webapps\solr7\WEB-INF\lib下
3)将server/lib/metrics* 开头的5个jar复制到 D:\Program Files\apache-tomcat-8.5.30\webapps\solr7\WEB-INF\lib下
4)把server/resources/目录下的log4j.properties,复制到solr7的WEB-INF/,要创建一个classes的目录
5)将solr相关文件复制到D:\Program Files\solr7Home
6)修改D:\Program Files\apache-tomcat-8.5.30\webapps\solr7\WEB-INF下的web.xml,将web工程和solrHome关联
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:/Program Files/solr7Home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
7)注释web.xml中以下内容
8)启动tomcat,访问http://192.168.1.220:8080/solr7/index.html,出现以下界面则配置成功
3、Solr配置core
1)点击Core Admin,add Core
name:自定义的名字,建议和instanceDir保持一致
instanceDir: solrhome目录下的实例类目
dataDir:默认填data即可
config:指定配置文件,zhaoyl_code/conf/solrconfig.xml
schema:指定schema.xml文件,zhaoyl_code/conf/schema.xml(实际上是managed-schema文件)
注意:红色框内的内容,instanceDir and dataDir need to exist before you can create the core
要求在创建solr核心时,instanceDir实例目录在sold home 中存在
如果instanceDir实例目录不存在,点击添加会有如下提示,但会在solr/home中多一个instanceDir实例目录
2)将solr7home/configsets/sample_techproducts_configs/目录下的conf 拷贝到zhaoyl_code 目录下,目录结构:zhaoyl_code/conf/
b.将contrib目录,dist目录拷贝到solrhome目录中
3)修改solrconfig.xml文件,指定solr contrib 和dist的位置
4)刷新页面,出现如下图所示则表示成功
4、导入数据
1)点击Dataimport 时,出现The solrconfig.xml file for this index does not have an operational DataImportHandler defined!
解决如下:
复制sorl7home/dist/solr-dataimporthandler*.jar和mysql的jdbc驱动mysql-connector-java-5.1.42.jar(需自己网上下载) 到tomcat的webapps/solr7/WEB-INF/lib/下
2)配置DataImportHandler
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">my-data-config.xml</str>
<!--<str name="update.chain">uuid</str> -->
</lst>
</requestHandler>
3)在D:\Program Files\solr7Home\zhaoyl_core\conf下添加my-data-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource name="source-materail" type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/zhaoyl_material"
user="zhaoyl"
password="zhaoyl" />
<document>
<entity name="cosmetic_comment" dataSource="source-materail" pk="id"
query="select id,cosmetic_id, uid_wechat,uid,user_name,nick_name,create_time,update_time, content,content_view,auditor,audit_time,audit_state,filter_flag,state from cosmetic_comment">
<field column='id' name='id' />
<field column='cosmetic_id' name='cosmetic_id' />
<field column='uid_wechat' name='uid_wechat' />
<field column='uid' name='uid' />
<field column='user_name' name='user_name' />
<field column='create_time' name='createtime' dateTimeFormat='yyyy-MM-dd HH:mm:ss' />
<field column='update_time' name='update_time' dateTimeFormat='yyyy-MM-dd HH:mm:ss' />
<field column='content' name='content' />
<field column='content_view' name='content_view' />
<field column='auditor' name='auditor' />
<field column='audit_time' name='audit_time' />
<field column='audit_time' name='audit_time' />
<field column='filter_flag' name='filter_flag' />
<field column='state' name='state' />
</entity>
</document>
</dataConfig>
4)重启tomcat,出现下图则配置成功:
5)添加数据库中对应的Field(注意solr已经存在的field 不需要添加 ,具体可在managed-schema中查看已有的field),
然后数据才能完整的导入。否则导入数据进行query 查询的时候只有id ,_version_两个字段。
6)数据导入
Command:full_import:全量导入;delta_import:增量导入。
Clean:在索引开始构建之前是否删除之前的索引,默认为true
Commit:在索引完成之后是否提交。默认为true
Execute:执行导入
Refresh Status:刷新后才能看到数据发生了变化(点一次刷新一次)
选择 全量导入,Execute执行,Refresh Status刷新查看状态,其他都选默认即可。
5、配置中文分词器ikanalyzer (ik-analyzer-solr5-5.x.jar)
1)将ik-analyzer-solr5-5.x.jar这个jar包放入solr7项目下的WEB-INF\lib目录中去,将IKAnalyzer.cfg.xml,mydict.dic(搜狗的扩展词库),stopword.dic放在solr项目下的WEB-INF\classes目录中去。
2)配置中文分词器
<!--text Chinese -->
<fieldType name="text_cn" 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>
<!-- ikanalyzer 中文分词器-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
3)测试分词器效果(ikanalyzer分词器效果明显更好)
ikanalyzer 分词器
solr自带smart分词器