solr 全文搜索引擎简单实用

package com.lrd.util;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.beans.DocumentObjectBinder;
import org.apache.solr.client.solrj.impl.HttpSolrClient;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;

import com.lrd.pojo.StudentPojo;

/**
 * @name solrUtil
 * @author Example W
 * @time 2018-07-18
 */
public class SolrUtil {
    private static SolrClient client;
    private static String url;
    static {
        url = "http://localhost:8983/solr/new_core";
        client = new HttpSolrClient.Builder(url).build();
    }
    /**
     * 保存或者更新solr数据
     * @param res
     */
    public static <T> boolean saveSolrResource(T solrEntity) {
        DocumentObjectBinder binder = new DocumentObjectBinder();
        SolrInputDocument doc = binder.toSolrInputDocument(solrEntity);
            try {
    client.add(doc);
    client.commit();
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
        return true;
    }

    /**
     * 删除solr 数据
     * @param id
     */
    public static boolean removeSolrData(String id) {
        try {
            client.deleteById(id);
            client.commit();
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
     /**
     * 查询
     *
     * @param keywords
     */
    public static List<StudentPojo> queryHighlight(String keywords) throws SolrServerException, IOException {
        SolrQuery solrQuery = new SolrQuery();
        solrQuery.setQuery("sname:" + keywords ); // 设置查询关键字
        solrQuery.setHighlight(true); // 开启高亮
        solrQuery.setHighlightRequireFieldMatch(true);
        solrQuery.addHighlightField("sname"); // 高亮字段
        solrQuery.setHighlightSimplePre("<font color='red' style='font-weight: bold;'>"); // 高亮单词的前缀
        solrQuery.setHighlightSimplePost("</font>"); // 高亮单词的后缀
        /**
         * hl.snippets
         * hl.snippets参数是返回高亮摘要的段数,因为我们的文本一般都比较长,含有搜索关键字的地方有多处,如果hl.snippets的值大于1的话,
         * 会返回多个摘要信息,即文本中含有关键字的几段话,默认值为1,返回含关键字最多的一段描述。solr会对多个段进行排序。
         * hl.fragsize
         * hl.fragsize参数是摘要信息的长度。默认值是100,这个长度是出现关键字的位置向前移6个字符,再往后100个字符,取这一段文本。
         */
        solrQuery.setHighlightFragsize(100);
        QueryResponse query = client.query(solrQuery);
        SolrDocumentList lists = query.getResults();//查询结果集
        //List<House> items = new ArrayList<House>();
        List<StudentPojo> beans = query.getBeans(StudentPojo.class);
        Map<String, Map<String, List<String>>> highLightMap = query.getHighlighting();
        for(int t=0;beans!=null && t<beans.size();t++)
        {
         StudentPojo house =beans.get(t);
         List<String> nameList = highLightMap.get(house.getId()).get("sname");
         house.setSname(nameList.get(0));
        }
      
        return beans;
    }
}

 

 

 

 


 @RequestMapping("studentList")
 @ResponseBody
 public PageInfo<StudentPojo> studentList(Integer page,String mohu) {
  mohu=mohu==null?"":mohu;
  PageInfo<StudentPojo> list = studentService.studentList(page);
  for (StudentPojo map : list.getList()) {
   SolrUtil.saveSolrResource(map);
  }
  return list;
 }

 
 @RequestMapping("mohuList")
 @ResponseBody
 public List<StudentPojo>  mohuList(String mohu) throws SolrServerException, IOException{
   mohu=mohu==null?"":mohu;
   List<StudentPojo> list = SolrUtil.queryHighlight(mohu);
   return list;
  
 }

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

LiRenDong_

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值