solr 检索、分页、提取摘要和高亮

1. 依赖的jar 包+ jdk 1.8以上, 如果少包或者jdk 版本不对,启动就报错了。

2. 检索类

public class SearchSolrService{
	
	public static HttpSolrClient solrServer;
	private static Logger logger = LoggerFactory.getLogger(SearchSolrService.class);
	
	static {
		solrServer = new HttpSolrClient(PortalConfig.SEARCH_TEXT_URL);
	    solrServer.setConnectionTimeout(5000);
	}
	
	/**
	 * 全文检索
	 * @author guosidi
	 * @date 2017年8月4日 下午3:30:20
	 * @return
	 * @return Map<String,Object>
	 */
	public Map<String, Object> solrSearch( ){

	
	Map<String, Object> map = new HashMap<String, Object>();
	
	List<String> searchParam = new ArrayList<String>(); // 全文检索的内容
	searchParam.add("检索列 :" +" value值");
	
	SolrQuery query = new SolrQuery();
	if(searchParam.size() == 0){
		query.set("q", "*:*"); // 所有的内容, 这时摘要无法提取
	}else{
		query.set("q",   StringUtils.join(searchParam, " AND ")); // 注意AND前后有空格
	}
	query.set("defType", "edismax"); // 相似度在80%以上
	query.set("mm", "80%");
	// 开启高亮组件
	query.setHighlight(true).setHighlightSnippets(1); 
        query.addHighlightField("text");// 高亮字段
        query.addHighlightField("ca_title");// 高亮字段
        //标记,高亮关键字前缀 后缀
        query.setHighlightSimplePre("<font color='red'>");
        query.setHighlightSimplePost("</font>");
        query.setHighlightFragsize(100); //   每个分片的最大长度,默认为100。
        
      //获取查询结果
        try {
		QueryResponse response = solrServer.query(query);
			 //查询得到文档的集合  
	         SolrDocumentList solrDocumentList = response.getResults(); 
	         Map<String, Map<String, List<String>>>  highlighting = response.getHighlighting();
	         
	         System.out.println("通过文档集合获取查询的结果"); 
	         System.out.println("查询结果的总数量:" + solrDocumentList.getNumFound());  
	         //遍历列表 
	         List<CatalogExt> rows = new ArrayList<CatalogExt>();
	         for (SolrDocument doc : solrDocumentList) {
	        	 CatalogExt ext = new CatalogExt(); // 实体类
	        	 ext.setCataId((String) doc.get("id"));
	        	 if(doc.containsKey("ca_title")){
	        		 ext.setCaTitle((String)doc.get("ca_title"));
	        	 }
	        	 if(doc.containsKey("img_url")){
	        		ext.setImgUrl((String) doc.get("img_url"));
			 }
			 if(doc.containsKey("create_time")){
				ext.setCreateTime(new Date(Long.parseLong(doc.get("create_time").toString())));
		         }
		         if(doc.containsKey("res_type")){		
				ext.setResType((String) doc.get("res_type"));
		         }
		         if(doc.containsKey("keyword")){
				ext.setKeyword((String) doc.get("keyword"));
		         }
			 // 获取高亮和摘要
	        	 List<String> hlRows = highlighting.get(doc.get("id")).get("text");
	        	 if(hlRows!= null && hlRows.size() !=0){
	        		 ext.setDescription(hlRows.get(0));
	        	 }
	        	 List<String> hlTitleRows = highlighting.get(doc.get("id")).get
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值