在linux系统上搭建solr,并且使用ik分词,添加数据导入,使用java代码实现增删改查相关功能。
1.solr下载
下载solr的tar包:https://archive.apache.org/dist/lucene/solr,根据所需下载具体的版本呢
下载IK分词jar包:GitHub - magese/ik-analyzer-solr: ik-analyzer for solr 7.x-8.x,下载jar包
2.解压安装
创建solr安装目录
mkdir -p /usr/local/solr
解压 solr包
tar -zxf solr-8.2.0.tgz -C /usr/local/solr
进入安装solr的目录
cd /usr/local/solr/solr-8.2.0
solr启动或者停止
bin/solr start
bin/solr start -force
bin/solr stop -all
创建实例
bin/solr create -c test -force
3.安装ik分词器
将 ik-analyzer-8.5.0.jar复制到/usr/local/solr/solr-8.2.0/server/solr-webapp/webapp/WEB-INF/lib
实例配置
进入/usr/local/solr/solr-8.2.0/server/solr/test/conf
vi managed-schema
最文件末尾添加一下信息
<!-- 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>
4.数据导入
进入/usr/local/solr/solr-8.2.0/server/solr/test/conf
vi managed-schema
文件113行
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />下添加相关字
<field name="QUESTION_ID" type="text_ik" indexed="true" stored="true"/>
<field name="QUESTION_STEM" type="text_ik" indexed="true" stored="true"/>
<field name="sortField" type="string" indexed="true" stored="false" multiValued="false"/>
<copyField source="QUESTION_STEM" dest="sortField"/>
进入/usr/local/solr/solr-8.2.0/server/solr/test/conf/solrconfig.xml
87行添加:
<lib dir="${solr.install.dir:../../../..}/contrib/dataimporthandler/lib" regex=".*\.jar" />
文件最后添加
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"><lst name="defaults"><str name="config">data-config.xml</str></lst></requestHandler>
在/usr/local/solr/solr-8.2.0/server/solr/test/conf创建data-config.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"driver="com.mysql.jdbc.Driver"url="jdbc:mysql://192.168.0.72:8066/SSEP_RESOURCE"user="root"password="Mxjy#1105test"/>
<document><entity name="question" query="SELECT QUESTION_ID,QUESTION_STEM FROM trquestion_stem "><field column="QUESTION_ID" name="QUESTION_ID" /><field column="QUESTION_STEM" name="QUESTION_STEM" /></entity>
</document>
</dataConfig>
导入mysql数据库数据先关包
复制包到/usr/local/solr/solr-8.2.0/server/solr-webapp/webapp/WEB-INF/lib
ik-analyzer-8.5.0,前边下载的
mysql-connector-java-5.1.32,自行下载
/usr/local/solr/solr-8.2.0/dist/solr-dataimporthandler-8.2.0
/usr/local/solr/solr-8.2.0/dist/solr-dataimporthandler-extras-8.2.0
5.添加访问账号和密码
目录/usr/local/solr/solr-8.2.0/server/etc添加verify.properties账号密码文件,格式如下
#用户名 密码 权限
user:pass,admin
修改/usr/local/solr/solr-8.2.0/server/contexts/solr-jetty-context.xml文件,在configure中添加如下配置
<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>
修改/usr/local/solr/solr-8.2.0/server/solr-webapp/webapp/WEB-INF/web.xml文件,在security-constraint后追加如下配置
<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>
6.重启项目
启用和停用命令:在/usr/local/solr/solr-8.2.0目录中执行
强制启动:bin/solr start -force
强制停止:bin/solr stop -all
7.java使用solrj包进行增删改查
仓库坐标
<dependency><groupId>org.apache.solr</groupId><artifactId>solr-solrj</artifactId><version>8.2.0</version>
</dependency>
测试用例如下
public class SolrUtil {protected static Logger logger = LogManager.getLogger(SolrUtil.class);public static void main(String[] args) {//queryQuestionByContentFromSolr();//addQuestionToSolr();//deleteDocumentById();}/*** 新增试题索引*/public static void addQuestionToSolr(){try {HttpSolrClient.Builder builer = new HttpSolrClient.Builder("http://192.168.0.222:8983/solr").withConnectionTimeout(10000).withSocketTimeout(60000);SolrClient client = builer.build();SolrInputDocument inputDocument = new SolrInputDocument();inputDocument.addField("id", "77777");inputDocument.addField("QUESTION_ID", "77777");inputDocument.addField("QUESTION_STEM", "角色名称7777788888");UpdateRequest updateRequest = new UpdateRequest();updateRequest.setBasicAuthCredentials("name","123456");updateRequest.add(inputDocument);UpdateResponse commit = updateRequest.commit(client, "test");System.out.println(commit.getStatus());System.out.println(commit.getResponse());System.out.println("结束!");} catch (SolrServerException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 删除试题*/public static void deleteDocumentById(){try {HttpSolrClient.Builder builer = new HttpSolrClient.Builder("http://192.168.0.222:8983/solr").withConnectionTimeout(10000).withSocketTimeout(60000);SolrClient client = builer.build();/* SolrInputDocument inputDocument = new SolrInputDocument();inputDocument.addField("id", "77777");inputDocument.addField("QUESTION_ID", "77777");inputDocument.addField("QUESTION_STEM", "角色名称7777788888");*//*client.add(inputDocument);client.commit();*/UpdateRequest updateRequest = new UpdateRequest();updateRequest.setBasicAuthCredentials("name","123456");String query = "id:77777";updateRequest.deleteByQuery(query);//UpdateResponse process = updateRequest.process(client, "test");updateRequest.commit(client, "test");System.out.println("结束!");} catch (SolrServerException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 条件查询试题类*/public static void queryQuestionByContentFromSolr() {try {String sqStr = "角色名称77777888889";ModifiableSolrParams params = new ModifiableSolrParams(); params.set(HttpClientUtil.PROP_BASIC_AUTH_USER, "name"); params.set(HttpClientUtil.PROP_BASIC_AUTH_PASS, "123456"); CloseableHttpClient closeableHttpClient = HttpClientUtil.createClient(params);HttpSolrClient.Builder builer = new HttpSolrClient.Builder("http://192.168.0.222:8983/solr/test/").withHttpClient(closeableHttpClient);SolrClient client = builer.build();SolrQuery sq = new SolrQuery();sq.set("q", "QUESTION_STEM:"+sqStr);//sq.addFilterQuery("GRADE:"+null);//sq.addFilterQuery("COURSE:0005");//sq.setRows(5);QueryResponse response = client.query(sq);SolrDocumentList list = response.getResults();for (SolrDocument solrDocument : list) {String QUESTION_ID = (String) solrDocument.getFirstValue("QUESTION_ID");String QUESTION_STEM = (String) solrDocument.getFirstValue("QUESTION_STEM");//String GRADE = (String) solrDocument.getFirstValue("GRADE");//String COURSE = (String) solrDocument.getFirstValue("COURSE");//System.out.println("GRADE:"+GRADE+"-COURSE:"+COURSE+"-QUESTION:"+QUESTION_ID + "-" + QUESTION_STEM);System.out.println("QUESTION:"+QUESTION_ID + "-" + QUESTION_STEM);}client.close();System.out.println("结束!");} catch (SolrServerException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}
参考:
solr 安装和使用_solr安装-CSDN博客
手把手教你 对 solr8 配置用户登录验证_solrj 8 认证-CSDN博客