solr-7.7.3配置详解,跟springboot整合 (二)

6 篇文章 0 订阅

solr-7.7.3配置详解请看:solr-7.7.3配置详解,并且连接数据库 (一)

1、在application.yml配置solr的连接地址:

spring:
    data:
        solr:
            host: http://127.0.0.1:8080/solr/collection1

2、pom文件添加依赖:

 <!--集成solr搜索引擎客户端-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-solr</artifactId>
            <version>2.4.0</version>
        </dependency>
        <!--如果项目需要用HttpClient,版本要4.5.10以上的-->
        <dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.10</version>
		</dependency>

java 代码:

package com.example.demo.controller;

import com.example.demo.Entity.ShopProductEntity;
import org.apache.commons.lang3.StringUtils;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.apache.solr.client.solrj.SolrClient;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RequestMapping("solr")
@RestController
public class SolrController {
    @Autowired
    private SolrClient client;

    /**
     * @param:
     * @return:
     * @Date: 2021/2/9
     * @author:liuyu 新增/修改 索引     * 当 id 存在的时候, 此方法是修改, 如果 id 不存在, 则是新增
     * 如果spring.data.solr.host 里面配置到 core了, 那么这里就不需要传 collection1 这个参数
     * 下面都是一样的
     */
    @PostMapping("add")
    public String add(ShopProductEntity moduleInfo) {
        try {
            if (StringUtils.isEmpty(moduleInfo.getId()) {
                throw new Exception("id为空");
            }
            //ShopProductEntity moduleInfo = new ShopProductEntity();
            SolrInputDocument doc = new SolrInputDocument();
            doc.addField("id", moduleInfo.getId());
            doc.addField("pro_ode", moduleInfo.getProCode());
            doc.addField("pro_name", moduleInfo.getProName());
            //solrCore 是core 比如这边是collection1,当然这边地址有配置core了,就不需要这句话了
//            client.add(solrCore,doc);
            client.add(doc);
            client.commit();
            return "success";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }

    }

    /**
     * @param:
     * @return:
     * @Date: 2021/2/9
     * @author:liuyu 根据id删除索引
     */
    @PostMapping("delete")
    public String delete(String id) {
        try {
               //solrCore 是core 比如这边是collection1,当然这边地址有配置core了,就不需要这句话了
//            client.add(solrCore,doc);
            client.deleteById(id);
            client.commit();
            return "success";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

    /**
     * @param:
     * @return:
     * @Date: 2021/2/9
     * @author:liuyu 删除所有的索引
     */
    @PostMapping("deleteAll")
    public String deleteAll() {
        try {
              //solrCore 是core 比如这边是collection1,当然这边地址有配置core了,就不需要这句话了
//            client.add(solrCore,doc);
            client.deleteByQuery("*:*");
            client.commit();
            return "success";
        } catch (Exception e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

    /**
     * @param:
     * @return:
     * @Date: 2021/2/9
     * @author:liuyu 根据id查询索引
     */
    @PostMapping("getById")
    public String getById(String id) throws Exception {
        SolrDocument document = client.getById(id);
        System.out.println(document);
        return document.toString();
    }

    /**
     * 综合查询: 在综合查询中, 有按条件查询, 条件过滤, 排序, 分页, 高亮显示, 获取部分域信息
     */
    @PostMapping("search")
    public List<Map<String, Object>> search(String proName, String area, String convenientStatus, int pageStart, int pageEnd) {
        try {
            SolrQuery params = new SolrQuery();
            //查询条件,
            params.set("q", proName);

            //过滤条件
            params.addFilterQuery("area:*" + area + "*");//地区
            //如果便捷事项为空,则不过滤便捷事项
            if (StringUtils.isNotBlank(convenientStatus)) {
                params.addFilterQuery("convenientStatus:*" + convenientStatus + "*");//便捷事项
            }
            //
            params.addFilterQuery("types:2");//(0:公共,1:定制化)
            //排序
//           params.addSort("product_price", SolrQuery.ORDER.asc);

            //分页,第一条乘以数量等于第几页
            params.setStart(pageStart * pageEnd);
            params.setRows(pageEnd);

            //默认域,查询字段
            params.set("df", "pro_name");

            //只查询指定域
//            params.set("fl", "id,product_title,product_price");

            //高亮
            //打开开关
            params.setHighlight(true);
            //指定高亮域
            params.addHighlightField("pro_name");
            //设置前缀
            params.setHighlightSimplePre("<span style='color:#28FF28'>");
            //设置后缀
            params.setHighlightSimplePost("</span>");

            QueryResponse queryResponse = client.query(params);

            SolrDocumentList results = queryResponse.getResults();

            long numFound = results.getNumFound();
            System.out.println("输出总条数,跟分页的值无关:"+numFound);
            //获取高亮显示的结果, 高亮显示的结果和查询结果是分开放的
            Map<String, Map<String, List<String>>> highlight = queryResponse.getHighlighting();
            List<Map<String, Object>> listData = new ArrayList<>();
            for (SolrDocument result : results) {
                Map<String, Object> mapData = new HashMap<>();
                Map<String, List<String>> map = highlight.get(result.get("id"));
                List<String> list = map.get("pro_name");
                mapData.put("id", result.get("id"));
                mapData.put("proCode", result.get("pro_code"));
                mapData.put("proName", list.get(0));
                mapData.put("proTypeId", result.get("pro_type_id"));
                mapData.put("proImg", result.get("pro_img"));
                mapData.put("price", result.get("price"));
                listData.add(mapData);
            }
            return listData;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


}

在这里插入图片描述

sql资源下载
solr整合springboot的demo

solr查询空值、null、不存在的字段的方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值