solr之实现搜索自定义样式高亮及排序

先记录下遇到的问题:

1、

//第一个string 表示查询出来的数据的Id ,第二个string 表示这条数据的高亮的字段  ,第三个就是处理后的内容xxxxxx手机热销
Map>> highlighting = response.getHighlighting();

2、

字段设定为高亮,但是搜索内容中,这个字段的内容并没有符合搜索内容,则这个字段返回的list为null,否则报空指针异常

//如果设置显示的字段不包含搜索内容,list为null   即 productTitleList.get(0)会报空指针
List productTitleList = highlighting.get(productId).get("product_title");

3、

//没有存储的字段不能取,否则报空指针异常
//
//这里报空指针   因为product_desc没有存储   document.get("product_desc")会报错
if (CollectionUtils.isEmpty(productDescList)){
    //这步会报错,并没有"product_desc"这个字段的信息
    product.setDesc(document.get("product_desc").toString());
}else {
    product.setDesc(productDescList.get(0));
}

 

开始高亮学习

首先,solr_core库里只有这点内容...

solr之实现搜索自定义样式高亮及排序_第1张图片

 

 

新建SearchController类

/**
 * @Description
 * @Author by mocar小师兄
 * @Date 2020/4/21 23:42
 **/
@Controller
@RequestMapping("/search")
public class SearchController {
    @Autowired
    private SolrClient solrClient;

    @GetMapping("/queryByCondition")
    public String queryByCondition(String queryStr,Model model){
        SolrQuery solrQuery = new SolrQuery();
        //设置条件查询
        solrQuery.setQuery("product_keywords:" + queryStr);
        //设置排序
        solrQuery.setSort("id", SolrQuery.ORDER.desc);
        //开启高亮显示的字段及 高亮自定义样式
        solrQuery.setHighlight(true);
        solrQuery.setHighlightSimplePre("");
        solrQuery.setHighlightSimplePost("");
        solrQuery.addHighlightField("product_title");
        solrQuery.addHighlightField("product_sell_point");
        solrQuery.addHighlightField("product_desc");
        try {
            QueryResponse response = solrClient.query(solrQuery);
            //第一个string 表示查询出来的数据的Id ,第二个string 表示这条数据的高亮的字段  ,第三个就是处理后的内容xxxxxx手机热销
            Map>> highlighting = response.getHighlighting();
            SolrDocumentList documentList = response.getResults();
            List products = new ArrayList<>(documentList.size());
            for (SolrDocument document : documentList) {
                Product product = new Product();
                String productId =document.get("id").toString();
                product.setId(productId);
                product.setPrice(new Double(document.get("product_price").toString()));
                product.setImage(document.get("product_image").toString());
                product.setCategory_name(document.get("product_category_name").toString());
                //如果设置显示的字段不包含搜索内容,list为null
                List productTitleList = highlighting.get(productId).get("product_title");
                List productSellPointList = highlighting.get(productId).get("product_sell_point");
                List productDescList = highlighting.get(productId).get("product_desc");
                if (CollectionUtils.isEmpty(productTitleList)){
                    product.setTitle(document.get("product_title").toString());
                }else {
                    product.setTitle(productTitleList.get(0));
                }
                if (CollectionUtils.isEmpty(productSellPointList)){
                    product.setSell_point(document.get("product_sell_point").toString());
                }else {
                    product.setSell_point(productSellPointList.get(0));
                }
                //没有存储的字段不能取
                //
                //这里报空指针   因为product_desc没有存储   document.get("product_desc")会报错
                /*if (CollectionUtils.isEmpty(productDescList)){
                    product.setDesc(document.get("product_desc").toString());
                }else {
                    product.setDesc(productDescList.get(0));
                }*/

                products.add(product);
            }
            model.addAttribute("products",products);
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return "search";
    }

    @GetMapping("/test")
    public String test(){
        return "search";
    }
}

 

前端页面search.html





    
    solr search


    






-------------------------------------------------

 

 

打开浏览器,输入:http://localhost:8080/search/queryByCondition?queryStr=性价比高

搜索内容:“性价比高” 

效果如下:实现高亮

solr之实现搜索自定义样式高亮及排序_第2张图片

 

搜索内容:“小米” 

solr之实现搜索自定义样式高亮及排序_第3张图片

你可能感兴趣的:(搜索引擎)