// 被本類調用 private Map searchList(Map searchMap) { // 1.1關鍵字查詢 SimpleHighlightQuery highlightQuery = new SimpleHighlightQuery( new Criteria("hyd_keywords").is(searchMap.get("keywords"))); highlightQuery.setHighlightOptions(new HighlightOptions().addField("hyd_title") .setSimplePrefix("<em style='color:red'>").setSimplePostfix("</em>")); // 1.2按分類篩選 相當having if (!"".equals(searchMap.get("category"))) { highlightQuery.addFilterQuery(new SimpleFilterQuery(new Criteria("hyd_category").is(searchMap.get("category")))); } // 1.3按品牌篩選 同上 if (!"".equals(searchMap.get("brand"))) { highlightQuery.addFilterQuery(new SimpleFilterQuery(new Criteria("hyd_brand").is(searchMap.get("brand")))); } // 1.4過濾規格 同上 if (searchMap.get("spec") != null) { Map<String, String> specMap = (Map) searchMap.get("spec"); for (String key : specMap.keySet()) { highlightQuery.addFilterQuery(new SimpleFilterQuery(new Criteria("hyd_spec_" + key).is(specMap.get(key)))); } } /* * 查詢 剛剛開始 */ HighlightPage<TbItem> page = solrTemplate.queryForHighlightPage(highlightQuery, TbItem.class); for (HighlightEntry<TbItem> highlightEntry : page.getHighlighted()) { TbItem tbItem = highlightEntry.getEntity(); if (highlightEntry.getHighlights().size() > 0 && highlightEntry.getHighlights().get(0).getSnipplets().size() > 0) { tbItem.setTitle(highlightEntry.getHighlights().get(0).getSnipplets().get(0));// 設置高亮的結果 } } HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("rowsHyd", page.getContent()); return hashMap; }
addFilterQuery方法需要的接口參數
篩選查詢是執行原始查詢后應用的簡單solr查詢。