solr 带高亮查询

版权声明: https://blog.csdn.net/pbrlovejava/article/details/82018793

截取一段真实项目中的高亮代码,常用的方法都已经使用,可以完成基本的高亮查询功能

@Repository
public class SolrItemSerchDaoImp implements SolrItemSerchDao{

	// 索引库
	@Autowired
	private SolrServer solrServer;

	//// 通过上面四个条件查询对象商品结果集
	public List<ProductModel> selectProductModelListByQuery(String queryString, String catalog_name,
			String price,String sort) throws Exception {

		// 查询 关键词  过滤条件
		// 价格排序 分页 开始行 每页数 高亮 默认域 只查询指定域
		SolrQuery solrQuery = new SolrQuery();
		// 关键词
		solrQuery.setQuery(queryString);
		// 过滤条件 
		if(null != catalog_name && !"".equals(catalog_name)){
			solrQuery.set("fq", "product_catalog_name:" + catalog_name);
		}
		if(null != price && !"".equals(price)){
			//0-9   50-*
			String[] p = price.split("-");
			solrQuery.set("fq", "product_price:[" + p[0] + " TO " + p[1] + "]");
		}
		// 价格排序
		if("1".equals(sort)){
			solrQuery.addSort("product_price", ORDER.desc);
		}else{
			solrQuery.addSort("product_price", ORDER.asc);
		}
		// 分页
		solrQuery.setStart(0);
		solrQuery.setRows(16);
		// 默认域
		solrQuery.set("df", "product_keywords");
		// 只查询指定域
		solrQuery.set("fl", "id,product_name,product_price,product_picture");
		// 高亮
		// 打开开关
		solrQuery.setHighlight(true);
		// 指定高亮域
		solrQuery.addHighlightField("product_name");
		// 前缀
		solrQuery.setHighlightSimplePre("<span style='color:red'>");
		solrQuery.setHighlightSimplePost("</span>");

		// 后缀
		// 执行查询
		QueryResponse response = solrServer.query(solrQuery);
		// 文档结果集
		SolrDocumentList docs = response.getResults();

		Map<String, Map<String, List<String>>> documents = response.getHighlighting();
		// Map K id V Map
		// Map K 域名 V List
		// List list.get(0)
		// 总条数
		long numFound = docs.getNumFound();
		
		
		List<ProductModel> productModels = new ArrayList<ProductModel>();
	
		for (SolrDocument doc : docs) {
			ProductModel productModel = new ProductModel();
			
			productModel.setPid((String) doc.get("id"));
			productModel.setPrice((Float) doc.get("product_price"));
			productModel.setPicture((String) doc.get("product_picture"));
			Map<String, List<String>> document= documents.get((String) doc.get("id"));
			List<String> list = map.get("product_name");
			
			productModel.setName(list.get(0));
			productModels.add(productModel);
		}
		return productModels;

	}
}

 注意:

 高亮开启后,高亮显示的数据是单独通过response.getHighlighting()获取出来,并且得到的是一个存储document的Map,Map的key是document的id,通过id取出的指定document,再取出指定域,如图

 

猜你喜欢

转载自blog.csdn.net/pbrlovejava/article/details/82018793