Solr主要是為了做搜索引擎,前台傳來的數據,我們通過在solr中設置對應的域,來對solr庫中的對應的字段進行中文分詞檢索,來返回map,前台獲取。
代碼展示:
前台傳來一個map集合,帶着所有關鍵字到后台獲取列表集合
//高亮查詢 @Override public Map<String, Object> searchList(Map<String, Object> map) { //不寫泛型返回的話,會出現IO異常 Map<String,Object> map1 = new HashMap(); //獲取前端傳遞的當前頁碼和展示數量 Integer pageNo = (Integer)map.get("pageNo"); Integer pageSize = (Integer)map.get("pageSize"); if (pageNo==null || pageNo<=0){ pageNo=1; } pageNo = (pageNo-1)*pageSize; //高亮查詢 HighlightQuery query = new SimpleHighlightQuery(); //起始索引,是當前頁碼-1*當前展示數量 query.setOffset(pageNo); query.setRows(pageSize); //高亮屬性的設置 HighlightOptions options = new HighlightOptions(); //設定屬性名,屬性名必須與solr字段名一致, options.addField("item_title"); //高亮屬性的設置前綴 options.setSimplePrefix("<em style='color:red'>"); //高亮屬性的設置后綴 options.setSimplePostfix("</em>"); //設置高亮選項 query.setHighlightOptions(options); //查詢條件的設置 Criteria criteria = new Criteria("item_keywords").is(map.get("keywords")); //添加復雜查詢 query.addCriteria(criteria); HighlightPage<Item> page = solrTemplate.queryForHighlightPage(query, Item.class); //5、遍歷實體集合,將符合要求的當西設置高亮 //華為 mate <em style='color:green'>華為mate</em> for (HighlightEntry<Item> h : page.getHighlighted()) {//循環高亮入口 Item item = h.getEntity();//獲取原實體 //h.getHighlights()高亮的內容, if (h.getHighlights().size() >0 && h.getHighlights().get(0).getSnipplets().size()>0){ //因為上面的復雜查詢不能夠直接去查詢,我們要將符合要求的結果拿出來,在設置格式,再賦值給對象 item.setTitle(h.getHighlights().get(0).getSnipplets().get(0)); } } List<Item> content = page.getContent(); //將list集合,以及前台所需要的總共頁數量,總記錄數,以及得到的集合返回到前端 map1.put("rows",content); map1.put("total",page.getTotalElements()); map1.put("totalPages",page.getTotalPages()); return map1; }