linux搭建solr,使用java进行索引增删改查

在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博客


手把手教你 对 solr8 配置用户登录验证_solrj 8 认证-CSDN博客
 

solr_使用中遇到的问题(内存不足)_solr内存不足-CSDN博客 

  • 31
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值