springboot整合solr实现CRUD

在上篇文章中我已经讲了solr的安装与配置、ik分词器的配置,今天给小伙伴们分享一下springboot如何整合solr实现增删改查。

一:导包

日常导包,不必多言

   <dependencies>
        <!--springBoot核心依赖,捉供了核心功能-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--引入web starter启动器 常见的场景-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--solr-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-solr</artifactId>
        </dependency>
        <!-- 默认 starter 会加载 solrj 进来, 下面这个可不引-->
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>6.6.2</version>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>
        <!--junit测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
    

需要的依赖和版本的话你们自己根据自己情况而定。

二:实体类映射

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Product {
    @Field
    private String id;

    @Field("name")
    private String productName;

    @Field
    private String merchant;

    @Field
    private String province;

    @Field
    private Float price;
}

三:创建solr客户端对象

  HttpSolrClient solrClient = new HttpSolrClient.Builder("http://127.0.0.1:8983/solr/tea_core").build();

solr的增删改都是通过solrClient进行操作的,方法也都很简单,需要注意的是,solr的增删改查都是针对索引的,并不作用于数据库

ps:这里写你自己solr地址

四:增删改查

增加

  @Test
    public void testAddProductDocument() throws IOException, SolrServerException {
        /*设置要添加的参数*/
        Product product = new Product().builder()
                .id("78787")
                .merchant("1111111111111111111")
                .price((float) 1200.00)
                .productName("非常的帅")
                .province("北京昌平")
                .build();
        UpdateResponse updateResponse = solrClient.addBean(product);
        /*提交请求*/
        solrClient.commit();
        /*获取状态*/
        int status = updateResponse.getStatus();
        /*查看状态*/
          System.out.println("status = " + status);
    }

修改和添加类似,根据id修改就好了

删除

/*根据主键删除*/
    @Test
    public void testSolrDeleteById() throws IOException, SolrServerException {
        /*设置要删除的id*/
        UpdateResponse product = solrClient.deleteById("1001");
        /*提交请求*/
        solrClient.commit();
        /*获取状态*/
        int status = product.getStatus();
        /*查看状态*/
        System.out.println("status = " + status);
    }
/*根据其他条件删除  */
    @Test
    public void testSolrDeleteByQueryCond() throws IOException, SolrServerException {
        /*设置要删除的条件*/
        UpdateResponse product = solrClient.deleteByQuery("name:男装xxxxxx");
        /*提交请求*/
        solrClient.commit();
        /*获取状态*/
        int status = product.getStatus();
        /*查看状态*/
        System.out.println("status = " + status);
    }

solr的查询分为两种,一种是普通查询,一种是高亮查询。两者的区别就是高亮查询可以高亮显示查询结果中的关键字。下面先给大家看一下普通查询,其实操作也很简单。

    /*根据默认查询:根据主键查询*/
    @Test
    public void testGetProductById() throws IOException, SolrServerException {
        /*设置条件*/
        SolrDocument solrDocument = solrClient.getById("24");
        /*获取数据*/
        Product product = solrClient.getBinder().getBean(Product.class, solrDocument);
        /*输入数据*/
        System.out.println("product = " + product);
    }

下面给大家看一下solr高亮查询如何实现:

/**
     * 根据其他条件高亮查询
     **/
    @Test
    public void testHL() throws IOException, SolrServerException {
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.set("q", "name:男衬衫");
        solrQuery.setStart(3);
        solrQuery.setRows(3);
        //高亮
        solrQuery.addHighlightField("name");
        solrQuery.setHighlightSimplePre("<font color='red'>");
        solrQuery.setHighlightSimplePost("</font>");
        solrQuery.setSort("price", SolrQuery.ORDER.asc);
        
        QueryResponse queryResponse = solrClient.query(solrQuery);
        // 获取高亮结果
        Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
        List<Product> productList = queryResponse.getBeans(Product.class);
        for (Product product : productList) {
        //获取高亮
            String name = highlighting.get(product.getId()).get("name").get(0);
            product.setProductName(name);
            System.out.println("pro = " + product);
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值