Solr实战运用

添加pom.xmlsolr依赖

<!--solr依赖-->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-solr</artifactId>
</dependency>

application.yml配置

spring:
  data:
    solr:
      host: http://localhost:8080/solr/mycore //mycore是自己创建的Core Admin

创建solr操作工具类:SolrUtils.java

/**
* @Description solr操作工具类
* @Author HeLiu
* @Date 2019/5/7 15:58
* @Version 1.0
**/
@Component
public class SolrUtils {


    private static final Logger logger = LoggerFactory.getLogger(SolrUtils.class);


    private SolrClient solrClient;


    private SolrQuery solrQuery;


    @Autowired
    public SolrUtils(SolrClient solrClient) {
        this.solrClient = solrClient;
        solrQuery = new SolrQuery();
    }


    /**
     * @Description 向solr中添加对象
     * @Author HeLiu
     * @Date 2019/5/7 16:03
     **/
    public void addSolrPO(SolrSearchService data) throws IOException, SolrServerException {
        solrClient.addBean(data);
        solrClient.commit();
    }

    /**
     * @Description solr查询 key-关键字(分页)
     * @Author HeLiu
     * @Date 2019/5/7 16:03
     **/
    public Map<String, Object> querySolrList(String key, int page, int row) throws IOException, SolrServerException {
        solrQuery.setQuery(key);
        //进行分页
        int start = (page - 1) * row;
        int ent = page * row;
        solrQuery.setStart(start);
        solrQuery.setRows(ent);
        //设置高亮字段
        solrQuery.setHighlight(true);//开启高亮组件或用query.setParam("hl", "true");
        solrQuery.addHighlightField("serviceName");//多个用逗号拼接
        solrQuery.setHighlightSimplePre("<font color='red'>");//标记,高亮关键字前缀
        solrQuery.setHighlightSimplePost("</font>");//后缀


        QueryResponse query = solrClient.query(solrQuery);
        // 文档结果集
        SolrDocumentList docs = query.getResults();
        logger.info("---------------->文档结果集:docs=" + docs);
        //高亮结果集
        Map<String, Map<String, List<String>>> highlightingRes = query.getHighlighting();
        logger.info("---------------->高亮结果集:highlightingRes=" + highlightingRes);


        Map<String, Object> params = new HashMap<>();
        //定义个集合
        List<SolrSearchService> list = new ArrayList<>();
        int total = getSolrIndexCount(key);
        if (total > 0) {
            SolrSearchService solrSearchService;
            for (SolrDocument s : docs) {
                solrSearchService = new SolrSearchService();
                String serviceid = s.getFirstValue("serviceid").toString();
                String serviceName = null;
                Map<String, List<String>> hightServiceIdMap = highlightingRes.get(serviceid);
                if (!CollectionUtils.isEmpty(hightServiceIdMap)) {
                    serviceName = hightServiceIdMap.get("serviceName").get(0);
                } else {
                    serviceName = s.getFirstValue("serviceName").toString();
                }
                solrSearchService.setServiceName(serviceName);
                solrSearchService.setServiceid(serviceid);
                solrSearchService.setServiceCode(s.getFirstValue("serviceCode").toString());
                solrSearchService.setDeptId(s.getFirstValue("deptId").toString());
                solrSearchService.setDeptName(s.getFirstValue("deptName").toString());
                solrSearchService.setLxdh(s.getFirstValue("lxdh").toString());
                solrSearchService.setBldd(s.getFirstValue("bldd").toString());
                solrSearchService.setBszn(s.getFirstValue("bszn").toString());
                solrSearchService.setCreateTime(s.getFirstValue("createTime").toString());
                list.add(solrSearchService);
            }
        }
        params.put("total", total);  //总条数
        params.put("pageIndex", page);  //当前页
        params.put("pageSize", row);     //每页显示数
        params.put("totalPage", (total + row - 1) / row);    //总页数
        params.put("rows", list);   //数据
        return params;
    }

    /**
     * 删除全部
     *
     * @throws IOException
     * @throws SolrServerException
     */
    public void delDoc() throws IOException, SolrServerException {
        solrClient.deleteByQuery("*:*");
        solrClient.commit();
    }


    /**
     * @Description 获取solr索引库中总条数
     * @Author HeLiu
     * @Date 2019/5/8 11:42
     **/
    public int getSolrIndexCount(String key) {
        int num = 0;
        try {
            solrQuery.set(key);
            QueryResponse query = solrClient.query(solrQuery);
            SolrDocumentList docs = query.getResults();
            num = (int) docs.getNumFound();
        } catch (Exception e) {
            logger.error("------------获取solr索引库中总条数error----------", e);
        }
        return num;

测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestSolrController {


    private static final Logger logger = LoggerFactory.getLogger(TestSolrController.class);


    @Autowired
    private SolrUtils solrUtils;


    @Test
    public void queryTest() {
        try {
            Map<String, Object> result = solrUtils.querySolrList("keyvalue:学生", 1, 10);
            logger.info("查询结果:result{}=" + result);
        } catch (Exception e) {
            logger.error("-------------查询失败:errorMsg{}=" + e);
        }
    }

}

测试结果:(将打印的数据用JSON转换工具转换查看,这里的分页数据,serviceName是高亮显示)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值