最近在学习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分词器