该环境搭建基于win10、JDK1.8、Mysql5.7
准备
- 本地电脑暗转JDK1.8或以上
- 下载Solr8.5.2 zip压缩包
- Mysql5.7
创建core
根据我的理解,一个solr服务是可以创建多个core,这里的每个core对对应一个服务,首先我们进入到解压后的根目录下,键入以下命令
// 进入根目录下的bin文件夹
cd bin
// 启动solr服务
.\solr start
此时solr服务成功启动,solr服务默认占用的端口为8983,在浏览器中访问:
在浏览器中看到该页面,标识solr服务已成功启动,接下来开始配置core,继续回到命令行,键入以下命令:
// projectname 标识你想要创建的core的名称
.\solr create -c projectname
在CoreAdmin菜单中查看core是否创建成功,页面显示如下则表示创建成功:
添加配置
在下载下来的压缩包中有 solr-8.5.2\example\example-DIH\ 文件夹,我们可以参考该示例,首先将 solr-8.5.2\example\example-DIH\solr\conf\ 文件夹下的 solr-data-config.xml 文件拷贝到 solr-8.5.2\server\solr\projectname\conf\ 文件夹下,由于我使用的是Mysql,这里需要添加Mysql java 驱动,用于solr连接Mysql数据库,下载完成后将驱动拷贝到 solr-8.5.2\dist\ 目录下,此外还需要在 solr-8.5.2\server\solr\projectname\conf\ 文件夹的 solrconfig.xml 文件中配置 jar 包地址,具体配置如下:
// 将数据库中的数据导入到solr当中需要使用到此依赖
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
// solr连接mysql数据库需要使用到数据库驱动依赖
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-java-.*\.jar" />
在上面我们拷贝了 solr-data-config.xml 文件,该文件为数据库连接配置文件,需要在 solrconfig.xml 文件中声明引用,具体配置代码如下
<requestHandler name="/dataimport" class="solr.DataImportHandler">
<lst name="defaults">
<str name="config">solr-data-config.xml</str>
</lst>
</requestHandler>
在 solr-data-config.xml 文件中配置数据库连接数据,具体配置如下:
<dataConfig>
<dataSource driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3308/dbname?serverTimezone=UTC&tinyInt1isBit=false" user="user" password="password" />
<document>
<entity name="question" pk="questionid" query="SELECT a.questionid as id, a.title, a.description, a.author, b.username as authorname from t_question a left join t_user b on a.author = b.userid">
<field column="questionid" name="id" />
<field column="title" name="title" />
<field column="description" name="description" />
<field column="author" name="author" />
<field column="authorname" name="authorname" />
<entity name="tag" query="select ciqt.tagname, ciqt.tagid, ciqt.tagicon from ck_question_tag a left join t_question_tag ciqt on a.tagid = ciqt.tagid where a.questionid = '${question.id}'">
<field column="tagname" name="tagname" />
<field column="tagid" name="tagid" />
<field column="tagicon" name="tagicon" />
</entity>
</entity>
</document>
</dataConfig>
修改完成后需要在 solr-8.5.2\server\solr\projectname\ 文件夹下的 managed-schema 文件中添加如下配置 :
<field name="title" type="string" indexed="true" stored="true" />
<field name="description" type="string" indexed="true" stored="true" />
<field name="author" type="string" indexed="true" stored="true" />
<field name="authorname" type="string" indexed="true" stored="true" />
<field name="tagname" type="string" indexed="true" stored="true" multiValued="true" />
<field name="tagid" type="pint" indexed="true" stored="true" multiValued="true" />
<field name="tagicon" type="string" indexed="true" stored="true" multiValued="true" />
<uniqueKey>id</uniqueKey>
以上基本完成了数据库连接及mysql数据到solr的配置,完成以上配置后在浏览器中验证是否可将mysql中数据到solr当中,成功导入效果如下:
配置中文分词
中文分词采用 ik-analyzer-solr 方案,具体操作如下:
- 将jar包放入Solr服务的Jetty或Tomcat的webapp/WEB-INF/lib/目录下;
- 将resources目录下的5个配置文件放入solr服务的Jetty或Tomcat的webapp/WEB-INF/classes/(如果没有classes文件则需要手动创建)目录下;
- IKAnalyzer.cfg.xml
- ext.dic
- stopword.dic
- ik.conf
- dynamicdic.txt
- 配置Solr的managed-schema,添加ik分词器,示例如下;
<!-- ik分词器 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
修改之前配置的 managed-schema 文件,修改为如下内容:
<field name="title" type="string" indexed="true" stored="true" />
<field name="description" type="text_ik" indexed="true" stored="true" />
<field name="author" type="string" indexed="true" stored="true" />
<field name="authorname" type="string" indexed="true" stored="true" />
<field name="tagname" type="string" indexed="true" stored="true" multiValued="true" />
<field name="tagid" type="pint" indexed="true" stored="true" multiValued="true" />
<field name="tagicon" type="string" indexed="true" stored="true" multiValued="true" />
<uniqueKey>id</uniqueKey>
验证中文分词器是否配置成功,配置成功则应如图所示:
配置solr登录账号
- 在 solr-8.5.2\server\etc\ 文件夹下创建 verify.properties 文件,用于配置 solr 登录账号及密码,文件内容如下:
- 修改 solr-8.5.2\server\contexts\ 文件夹下 solr-jetty-context.xml 文件,在文件中添加以下内容:
<Get name="securityHandler">
<Set name="loginService">
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">verify—name</Set>
<Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/verify.properties</Set>
</New>
</Set>
</Get>
- 修改 solr-8.5.2\server\solr-webapp\webapp\WEB_INF\ 文件夹下 web.xml 文件,具体修改内容如下:
<security-constraint>
<web-resource-collection>
<web-resource-name>Solr</web-resource-name>
<url-pattern>/</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>verify-name</realm-name>
</login-config>
再次访问若配置成功,则弹出如下提示框,要求输入账号密码:
tips
- 在生产环境部署时,由于我的服务器内存比较小,所以可以指定限制solr使用内存的大小,但是如果配置的过小,可能会导致服务无法启动。
- 绝大多数问题可以通过查看日志解决,日志目录为 solr-8.5.2\server\logs 查看 solr.log 文件。
文中所涉及的配置已上传,可在此地址进行下载。
最后安利下自己的小程序,一款程序员刷题小程序。