solr的基本操作及整合springboot

简介: 一、在solr中插入数据{    "id": 536563,    "tb_item_cid": 560,    "tb_item_cname": "手机",    "tb_item_title": "new2 - 阿尔卡特 (OT-927) 炭黑 联通3G手机 双卡双待",    "tb_item_sell_point": "清仓!仅北京,武汉仓有货!"}         在solr中插入的数据,这些数据的字段都需要在solr中进行“注册”,被“注册”过的字段,就可以支持分词,因此这些数据就可以被查询。

一、在solr中插入数据
{

    "id": 536563,

    "tb_item_cid": 560,

    "tb_item_cname": "手机",

    "tb_item_title": "new2 - 阿尔卡特 (OT-927) 炭黑 联通3G手机 双卡双待",

    "tb_item_sell_point": "清仓!仅北京,武汉仓有货!"

}

         在solr中插入的数据,这些数据的字段都需要在solr中进行“注册”,被“注册”过的字段,就可以支持分词,因此这些数据就可以被查询。

1.在solr中“注册”字段
      1)搜索出来以后的数据是什么样的,这样的数据才会存入到solr中
                   搜索出来的数据主需要有部分字段,

因此,通过设计一个专门用于存放solr中的数据的模型(javabean),来先获取这样的所有的数据,然后再存到solr里。

      2)设计javabean

         商品id

         商品名称

         商品实际售价

         商品图片

         商品描述

      3)根据javabean中的属性设计sql语句
SELECT

  a.pid as id,

  a.pname as t_product_name,

  a.sale_price as t_product_sale_price,

  a.pimage as t_product_pimage,

  b.pdesc as t_product_pdesc

FROM

  t_product a

  LEFT JOIN t_product_desc b

    ON a.pid = b.pid

      4)在solr中注册字段

编辑ik配置文件: managed_schema

   

   

   

让配置文件在容器中生效

复制到容器

docker cp managed-schema solr:/opt/solr/server/solr/ik_core/conf

重启容器

docker-compose restart

5)在solr的浏览器客户端中插入数据

6)查询数据

7)删除数据
根据查询结果删除

根据id来删除

二、在springboot中使用solr实现增删改查
1.添加依赖

    org.springframework.boot
    spring-boot-starter-data-solr

yml:

spring:

  data:

    solr:

      host: http://192.168.2.143:8983/solr/ik_core

2.编写javabean

3.往solr中插入数据
@Autowired

private TProductSearchDTOMapper mapper;

@Autowired

private SolrClient solrClient;

//将数据库中获取的数据,插入到solr库中

@Test

public void insertDataToSolr() throws IOException, SolrServerException {

    //1.获取数据库中的数据

    List products = mapper.selectAll();

   //2.将数据插入到solr

    //用于存放所有solr数据的集合

    List documents = new ArrayList<>();

    //封装Document对象

    for (TProductSearchDTO product : products) {

        SolrInputDocument document = new SolrInputDocument();

        document.addField("id",product.getId());

        document.addField("t_product_name",product.gettProductName());

        document.addField("t_product_sale_price",product.gettProductSalePrice().floatValue());

        document.addField("t_product_pimage",product.gettProductPimage());

        document.addField("t_product_pdesc",product.gettProductPdesc());

        //存入到集合中

        documents.add(document);

    }

    //提交给solr客户端

    solrClient.add(documents);

    //commit

    solrClient.commit();

}

4.在solr中查询数据
1)普通的查询并封装
@Autowired

    private SolrClient solrClient;

    //查询solr库

    @Test

    public void testQueryFromSolr() throws IOException, SolrServerException {

//        String keyword = "t_product_name:手机"; //指定字段查询

        //复制域查询

        String  keyword = "手机";

        //创建查询对象

        SolrQuery query = new SolrQuery();

        //往对象中设置参数

        query.set("df","t_product_keywords");//复制域查询

        query.setQuery(keyword);

        query.setStart(0);

        query.setRows(10);

        //高亮

        query.addHighlightField("t_product_name");

        query.setHighlight(true);

        query.setHighlightSimplePre("");

        query.setHighlightSimplePost("");

        //执行查询.得到响应结果

        QueryResponse response = solrClient.query(query);

//        System.out.println(response);

        //封装结果集==> List

        List products = new ArrayList<>();

        SolrDocumentList results = response.getResults();

        for (SolrDocument document : results) {

            TProductSearchDTO product = new TProductSearchDTO();

            Long id = Long.parseLong((String) document.getFieldValue("id"));

            product.setId(id);

            String t_product_name = (String) document.getFieldValue("t_product_name");

            product.settProductName(t_product_name);

            Float t_product_sale_price = (Float) document.getFieldValue("t_product_sale_price");

            product.settProductSalePrice(new BigDecimal(t_product_sale_price));

            String t_product_pimage = (String) document.getFieldValue("t_product_pimage");

            product.settProductPimage(t_product_pimage);

            String t_product_pdesc = (String) document.getFieldValue("t_product_pdesc");

            product.settProductPdesc(t_product_pdesc);

            products.add(product);

        }

        System.out.println(products);

    }

2)带高亮的查询并封装
  @Autowired

    private SolrClient solrClient;

    //查询solr库

    @Test

    public void testQueryFromSolr() throws IOException, SolrServerException {

//        String keyword = "t_product_name:手机"; //指定字段查询

        //复制域查询

        String  keyword = "手机";

        //创建查询对象

        SolrQuery query = new SolrQuery();

        //往对象中设置参数

        query.set("df","t_product_keywords");//复制域查询

        query.setQuery(keyword);

        query.setStart(0);

        query.setRows(10);

        //高亮

        query.addHighlightField("t_product_name");

        query.setHighlight(true);

        query.setHighlightSimplePre("");

        query.setHighlightSimplePost("");

        //执行查询.得到响应结果

        QueryResponse response = solrClient.query(query);

//        System.out.println(response);

        //封装结果集==> List

        List products = new ArrayList<>();

        //获得数据结果集

        SolrDocumentList results = response.getResults();

        //获得高亮结果集

        Map>> highlighting = response.getHighlighting();

        for (SolrDocument document : results) {

            TProductSearchDTO product = new TProductSearchDTO();

            String stringId = (String) document.getFieldValue("id");

            Long id = Long.parseLong(stringId );//89983

            product.setId(id);

            //==========从高亮结果集中那带高亮效果的t_product_name=============

            Map> stringListMap = highlighting.get(stringId);

            List t_product_name1 = stringListMap.get("t_product_name");

            String t_product_name = t_product_name1.get(0);

            product.settProductName(t_product_name);

            Float t_product_sale_price = (Float) document.getFieldValue("t_product_sale_price");

            product.settProductSalePrice(new BigDecimal(t_product_sale_price));

            String t_product_pimage = (String) document.getFieldValue("t_product_pimage");

            product.settProductPimage(t_product_pimage);

            String t_product_pdesc = (String) document.getFieldValue("t_product_pdesc");

            product.settProductPdesc(t_product_pdesc);

            products.add(product);

        }

        System.out.println(products);

    }

5.在solr中删除数据

相关文章
|
4月前
|
运维 Java 程序员
SpringBoot —— 日志基本操作
SpringBoot —— 日志基本操作
39 0
|
6月前
|
Java 关系型数据库 MySQL
[笔记]Springboot入门《一》springboot+jpa+bootstrap+crud
[笔记]Springboot入门《一》springboot+jpa+bootstrap+crud
|
6月前
|
NoSQL Java Redis
[笔记]Springboot入门《四》Springboot使用Redis
[笔记]Springboot入门《四》Springboot使用Redis
|
8月前
|
存储 NoSQL Java
SpringBoot 中使用 MongoDB 基于 MongoRepository增删改查(基础篇)
SpringBoot 中使用 MongoDB 基于 MongoRepository增删改查(基础篇)
380 0
|
NoSQL 安全 Java
SpringBoot系列(2)整合MongoDB实现增删改查(完整案例)
自己本科时候一直使用的是Mysql,目前的课题组使用的是MongoDB,因此就花了一部分时间整理了一下,实现springboot与MongoDB的整合,并且实现基本的增删改查操作,从头到尾给出一个完整的案例。
722 0
SpringBoot系列(2)整合MongoDB实现增删改查(完整案例)
|
SQL Java 数据库连接
SpringBoot2.x系列教程31--SpringBoot整合H2内存数据库实现CRUD操作
前言 在上一章节中,我给大家详细讲解了H2数据库的安装配置,接下来我就带大家在Spring Boot中整合H2数据库,实现代码操作。 一. 以内嵌模式整合H2数据库 1. 创建Web项目 我们按照之前的经验,创建一个SpringBoot的Web程序,具体过程略,请参考下图创建。 2. 添加依赖包 然后在pom.xml文件中添加如下依赖包。 <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <de
1162 1
|
2月前
|
安全 Java Maven
【JavaEE进阶】 SpringBoot的创建与简单使用
【JavaEE进阶】 SpringBoot的创建与简单使用
|
6月前
|
SQL Java 数据库
[笔记]Springboot入门《三》springboot集成Quartz简单使用+数据库
[笔记]Springboot入门《三》springboot集成Quartz简单使用+数据库
|
NoSQL Java MongoDB
SpringBoot 系列教程 Solr 之查询使用姿势小结
接下来进入 solr CURD 的第四篇,查询的使用姿势介绍,本文将主要包括以下知识点 基本的查询操作 fq 查询 fl 指定字段查询 比较/范围 排序 分页 分组
353 0
SpringBoot 系列教程 Solr 之查询使用姿势小结
|
SQL XML Java
2、SpringBoot2.0实现增删改查(二)
在该文件夹下创建如下包:
127 0
2、SpringBoot2.0实现增删改查(二)