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
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值