首页 > 技术文章 > SpringDataSolr 过滤(或者叫筛选)查询

hnqm 2018-08-01 09:22 原文

// 被本类调用
	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查询。

推荐阅读