作者:行者 | 来源:互联网 | 2023-09-11 03:56
截取一段真实项目中的高亮代码,常用的方法都已经使用,可以完成基本的高亮查询功能
@Repository
public class SolrItemSerchDaoImp implements SolrItemSerchDao{// 索引库@Autowiredprivate SolrServer solrServer;通过上面四个条件查询对象商品结果集public List 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("");solrQuery.setHighlightSimplePost("");// 后缀// 执行查询QueryResponse response = solrServer.query(solrQuery);// 文档结果集SolrDocumentList docs = response.getResults();Map>> documents = response.getHighlighting();// Map K id V Map// Map K 域名 V List// List list.get(0)// 总条数long numFound = docs.getNumFound();List productModels = new ArrayList();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> document= documents.get((String) doc.get("id"));List 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,再取出指定域,如图