solr6.x 在 tomcat8 中的部署(入门级)
公司最近的项目希望引入全文索引功能,推荐用solr,于是我就上网自己搜了一些资料,发现很多博客写的五花八门,良莠不齐,踩过不少坑= =!于是想写一篇solr在tomcat下部署的文章,以期能对网友提供帮助。【本文只介绍单机tomcat部署】
1. 通俗点说solr
- solr是一个基于Apache Lucene的全文搜索服务器,可以通过Http或者 WebService访问它
- solr可以配置数据库连接,它能根据solr相关配置文件,拿到指定的数据库表中指定字段的数据,并且生成全文索引,以供调用
- 也就是说,使用方面,solr类似redis,为我们自己的application提供服务,只需要配置它,启动它,调用它
- solr-6.x 和solr-5.x有些不一样,本文只适用于solr-6.x
2. 如何在tomcat下部署
- 下载solr-6.5.1:solr–6.5.1下载
- 下载tomcat-8.5.27:tomcat所有版本下载,自己根据url选择
- 随便找个地方新建一个文件夹,命名为:
solr-tomcat-8.5.27
【自定义即可】 - 将上述两个下载的文件,拷贝进去,分别解压
- 在
solr-tomcat-8.5.27
下新建文件夹:solr-home
- 将
solr-tomcat-8.5.27\solr-6.5.1\server\solr
下的README.txt,solr.xml,zoo.cfg
三个文件拷贝到solr-home
下 - 在
solr-tomcat-8.5.27\apache-tomcat-8.5.27\webapps
目录下,新建一个空文件夹:solr
;将solr-tomcat8\solr-6.5.1\server\solr-webapp\webapp
下的所有文件,拷贝到刚刚新建的solr
文件夹中 - 在
solr-tomcat-8.5.27\apache-tomcat-8.5.27\webapps\solr\WEB-INF
文件夹中,新建一个文件夹:classes
,将solr-tomcat8\solr-6.5.1\server\resources\log4j.properties
拷贝到刚刚的classes
中 - 将以下jar包拷贝到
solr-tomcat8\apache-tomcat-8.5.27\webapps\solr\WEB-INF\lib
下:
solr-tomcat-8.5.27\solr-6.5.1\server\lib\ext\
下:【5个jar:所有的】solr-tomcat-8.5.27\solr-6.5.1\dist\
下:【2个jar:solr-dataimporthandler-6.5.1.jar,solr-dataimporthandler-extras-6.5.1.jar】solr-tomcat-8.5.27\solr-6.5.1\server\lib\
下:【5个jar:以metrics开头的jar】连接mysql的一个jar
:maven repository下载一个中文分词的jar
:别人上传的资源:IKAnalyzer6.5.0.jar下载
- 修改
solr-tomcat8\apache-tomcat-8.5.27\webapps\solr\WEB-INF\web.xml
:
- 在
<filter></filter>
标签前面加入:【其中env-entry-value为solr-home的绝对路径】
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>G:\tomcat\solr-tomcat8\solr-home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
【如果不做这一步会报错无JNDI连接】 - 注释掉最后的
<security-constraint></security-constraint>
【如果不做这一步浏览器访问会报错403】
- 在
- 访问
http://localhost:8080/solr/index.html
,能够看到solr控制面板,表示配置成功
3. solr简单操作介绍
- 新建core
- 在solr-home目录下,新建一个文件夹article【名字任意】
- 将
solr-tomcat8\solr-6.5.1\server\solr\configsets\basic_configs\
下面的conf文件夹,拷贝到solr-tomcat8\solr-home\article
- 在浏览器中的solr控制台,新建core,如下图:
- 会看到新建成功了,一定要按照顺序来
配置core
- 在
solr-tomcat8\solr-home\article\conf
中新建文件:data-config.xml
,将下列配置粘贴进去:
<?xml version="1.0" encoding="UTF-8"?> <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/hxyframe" user="root" password="root" batchSize="-1"/> <document> <entity name="solr_article" query="select id,title,author,img,content,create_time,update_time from solr_article"> <field column="id" name="id" /> <field column="title" name="title" /> <field column="img" name="img" /> <field column="author" name="author" /> <field column="content" name="content" /> <field column="create_time" name="createTime" /> <field column="update_time" name="updateTime" /> </entity> </document> </dataConfig>
【说明:】dataSource 中的url属性,不支持加
?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
;entity name是你的数据库表名,query是你想生成索引的数据范围,field 中的colnum为数据库表字段名,name为managed-schema文件中的field name;【本xml文件中不能有中文注释,切记】- 修改同目录下的
solrconfig.xml
文件,在最后的</config>
前加入下面代码
xml
<!--引入DataImportHandler类的jar-->
<lib dir="../../../solr-6.5.1/dist/" regex="solr-dataimporthandler-.*\.jar" />
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
修改同目录下
managed-schema
文件,加入下列代码<fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer"/> <analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> <field name="type" type="string" indexed="true" stored="true"/> <field name="img" type="string" indexed="true" stored="true"/> <field name="title" type="text_ik" multiValued="false" indexed="true" stored="true"/> <field name="author" type="text_ik" multiValued="false" indexed="true" stored="true"/> <field name="content" type="text_ik" indexed="true" stored="true"/> <field name="createTime" type="tdate" indexed="true" stored="true"/> <field name="updateTime" type="tdate" indexed="true" stored="true"/> <field name="keyWord" type="text_ik" multiValued="true" indexed="true" stored="true"/> <copyField source="title" dest="keyWord"/> <copyField source="author" dest="keyWord"/> <copyField source="content" dest="keyWord"/>
【说明:】copyField 可以用来做组合索引,例中,将title,content,author建成组合索引keyWord,意思就是当使用keyWord查询时,会从上述3个字段中查找匹配的数据
- 在
- 将配置好的数据源里面的数据,生成全文索引
- 操作如下图:
- solr query
- 操作如下图: