在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();
}
}
}
参考:
手把手教你 对 solr8 配置用户登录验证_solrj 8 认证-CSDN博客
手把手教你 对 solr8 配置用户登录验证_solrj 8 认证-CSDN博客