spring boot 整合solr 5.5 实现增删改查(附带solr安装、启动、配置文件、IK分词器)

java 整合solr 5.5 实现增删改查(附带solr安装、启动、修改配置文件步骤)

solr安装

官网直接下载即可
解压后是一个这样的目录结构
在这里插入图片描述
第一步:
创建索引库
点进server/solr文件夹中添加new_core文件夹
点进server\solr\configsets\sample_techproducts_configs 文件夹下conf目录放到new_core中
点进bin目录进行cmd,运行solr start,-p带指定端口启动 stop同理
在这里插入图片描述

第二步:
访问http://localhost:8983会显示这个页面就代表启动成功了
在这里插入图片描述
点core Admin 进行新增索引库,name为你给该索引起的名字,instanceDir为我们创建的文件夹名称,其他不变即可
在这里插入图片描述
创建完成可以看到我们的索引库的一些基本信息
在这里插入图片描述

修改solr配置文件

对应索引库目录下的config文件夹中的managed-schema文件中修改,修改配置文件后需要重启solr服务 solr stop -p 8983

<!-- 分词器配置 -->	
<fieldType name="text_ik" class="solr.TextField">   
  <analyzer type="index">
    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />
  </analyzer>
</fieldType>

<!-- 映射字段配置 -->
  <field name="field_name" type="string" indexed="true" stored="true" />
  <field name="field_age" type="int" indexed="true" stored="true" />

  
<!-- 分词映射字段配置  相当于在分词下方的多个字段中搜索,有符合也会返回数据-->
<field name="ik_a" type="text_ik" indexed="true" stored="false" multiValued="true" />
  <copyField source="field_name" dest="ik_a"/>
  <copyField source="field_age" dest="ik_a"/>

重启后点击到我们的索引库下面进行query,发现都是空数据
在这里插入图片描述

spring boot整合solr

pom

<properties>
    <druid.version>1.1.5</druid.version>
    <mysql-connector-java.version>5.1.48</mysql-connector-java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <maven-jar-plugin.version>3.0.0</maven-jar-plugin.version>
    <t-io.version>3.7.0.v20201010-RELEASE</t-io.version>
    <lombok.version>1.18.10</lombok.version>
    <mybatis-plus.version>2.3</mybatis-plus.version>
    <mybatis.version>2.1.3</mybatis.version>
    <hutool.version>5.3.3</hutool.version>
    <pool2.version>2.9.0</pool2.version>
    <swagger.version>2.9.2</swagger.version>
    <jackson.version>2.11.3</jackson.version>
    <spring-boot.version>2.3.5.RELEASE</spring-boot.version>
    <spring-activiti.version>7.1.0.M6</spring-activiti.version>
    <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>${spring-boot.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>${spring-boot.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>${lombok.version}</version>
    </dependency>
<!--    <dependency>-->
<!--      <groupId>mysql</groupId>-->
<!--      <artifactId>mysql-connector-java</artifactId>-->
<!--      <version>${mysql-connector-java.version}</version>-->
<!--    </dependency>-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <version>${spring-boot.version}</version>
    </dependency>
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-solr</artifactId>
        </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>

application.yml文件,solr后面跟着就是我们前面创建的索引库name

server:
  port: 21110
spring:
  data:
    solr:
      host: http://127.0.0.1:8983/solr/new_core
      repositories:
        enabled: true

索引新增,编辑和新增同理,id唯一,相同则编辑,不相同添加


    @Autowired
    private SolrClient solrClient;

    @Test
    public void addSolr() throws IOException, SolrServerException {
        //默认的solrClient就是配置文件中的索引库,如果想操作别的索引库通过HttpSolrClient对象即可
//        HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/core1").build();
        SolrInputDocument document = new SolrInputDocument();
        document.addField("id", UUID.randomUUID().toString());//solr中id无需配置,为必传项,没有id则报错
        document.addField("field_name","李四");
        document.addField("field_age",15);
        solrClient.add(document);
        solrClient.commit();
    }

索引删除

    @Test
    public void deleteSolr() throws IOException, SolrServerException {
        //默认的solrClient就是配置文件中的索引库,如果想操作别的索引库通过HttpSolrClient对象即可
//        HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/core1").build();
        solrClient.deleteById("3ac4be61-e81c-44dd-b474-a1933a3f14b2");
        List<String> list = new ArrayList<>();
        Collections.addAll(list,"8bce02e3-90f2-4bf7-91f2-d580c8f568c5","11b80c0a-ab20-4cb9-84ae-783eff22245b");
        solrClient.deleteById(list);//批量删除
        solrClient.deleteByQuery("field_name:李四");//根据条件删除
        solrClient.commit();
    }

索引查询(重点)

普通查询 q查询

@Test
    public void selectSolr1() throws IOException, SolrServerException {
        //默认的solrClient就是配置文件中的索引库,如果想操作别的索引库通过HttpSolrClient对象即可
//        HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/core1").build();
        Map<String, String> map = new HashMap<>();
        map.put("q","field_name:李四");//普通查询
        map.put("wt","json");
        map.put("rows","100");
        SolrParams params = new MapSolrParams(map);
        QueryResponse response = solrClient.query(params);
        SolrDocumentList results = response.getResults();
        for (SolrDocument result : results) {
            System.out.println(result);
        }
    }

过滤查询 fq

    @Test
    public void selectSolr2() throws IOException, SolrServerException {
        //默认的solrClient就是配置文件中的索引库,如果想操作别的索引库通过HttpSolrClient对象即可
//        HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/core1").build();
        Map<String, String> map = new HashMap<>();
        map.put("q","*:*");//fq也是在q的基础上查询的,所以q查询需要先符合条件,我们默认*:*
//        map.put("fq","field_name:李四 OR field_name:王五 ");//或、查询name值等于李四或者王五的数据
//        map.put("fq","field_age:[13 TO 16]");//n到n,查询age值从13到16的数据
        map.put("fq","field_name:李四 AND field_age:[13 TO 16]");//拼接起来就是查询名字为李四,年龄在13-16区间
        map.put("wt","json");
        map.put("rows","100");
        SolrParams params = new MapSolrParams(map);
        QueryResponse response = solrClient.query(params);
        SolrDocumentList results = response.getResults();
        for (SolrDocument result : results) {
            System.out.println(result);
        }
    }

搜索中常用的参数

在这里插入图片描述

IK 分词器配置

去maven中央仓库下载ik-analyzer-solr对应版本的jar即可,放入\solr-5.5.0\server\solr-webapp\webapp\WEB-INF\lib 下,分词器配置我们在上面已经配好了

IK 分词器查询

其实原理相同,我们分词器的name为ik_a,下面有两个分词字段,我们在查询ik_a的时候,分词字段中只要有符合的,就会查询出来,一般适用于主页当中的搜索引擎
在这里插入图片描述

    @Test
    public void selectIKSolr() throws IOException, SolrServerException {
        //默认的solrClient就是配置文件中的索引库,如果想操作别的索引库通过HttpSolrClient对象即可
//        HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/core1").build();
        Map<String, String> map = new HashMap<>();
        map.put("q","ik_a:(李四 or 18)");//普通查询
        map.put("wt","json");
        map.put("rows","100");
        SolrParams params = new MapSolrParams(map);
        QueryResponse response = solrClient.query(params);
        SolrDocumentList results = response.getResults();
        for (SolrDocument result : results) {
            System.out.println(result);
        }
    }

运行结果,可以看到李四和18都能查出来了
在这里插入图片描述

本篇到此也就差不多了,对你有帮助请点点赞,工具简单,怎样灵活的运用在项目中才是工具最大的用处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值