Spring Data Solr完成分组查询的功能

通过SpringDataSolr提供的分组查询完成商品分类列表的查询

在这里插入图片描述
(1)当用户输入关键字搜索后,除了显示列表结果外,还应该显示通过这个关键字搜索到的记录都有哪些商品分类。
(2)根据第一个商品分类查询对应的模板,根据模板查询出品牌列表
(3)根据第一个商品分类查询对应的模板,根据模板查询出规格列表
(4)当用户点击搜索面板的商品分类时,显示按照这个关键字查询结果的基础上,筛选此分类的结果。
(5)当用户点击搜索面板的品牌时,显示在以上结果的基础上,筛选此品牌的结果
(6)当用户点击搜索面板的规格时,显示在以上结果的基础上,筛选此规格的结果
(7)当用户点击价格区间时,显示在以上结果的基础上,按价格进行筛选的结果
(8)当用户点击搜索面板的相应条件时,隐藏已点击的条件。

之前SQL语句的分组查询:
比如说查询tb_item表中的分类名称

SELECT `category` FROM tb_item GROUP BY category;

得到以下结果:
在这里插入图片描述
Spring Data Solr提供了一组API,我们可以去调用。
solrTemplate.queryForGroupPage()

/**
 * 分组查询
 * 查询商品分类列表
 * @param searchMap
 * @return
 */
private List<String> searchCategoryList(Map searchMap) {
	
	List<String> list = new ArrayList();
	Query query = new SimpleQuery("*:*");
	// 关键字查询
	Criteria criteria = new Criteria("item_keywords");
	criteria.is(searchMap.get("keywords")); // 相当于sql的where子句
	query.addCriteria(criteria);
	
	// 设置分组选项
	GroupOptions groupOptions = new GroupOptions();
	groupOptions.addGroupByField("item_category");//  相当于sql的group by
	query.setGroupOptions(groupOptions);
	
	// 获取分组页
	GroupPage<TbItem> page = solrTemplate.queryForGroupPage(query , TbItem.class);
	
	// 获取分组结果对象
	GroupResult<TbItem> groupResult = page.getGroupResult("item_category");
	
	// 获取分组入口页
	Page<GroupEntry<TbItem>> groupEntries = groupResult.getGroupEntries();
	
	// 获取分组入口集合
	List<GroupEntry<TbItem>> content = groupEntries.getContent();
	
	for (GroupEntry<TbItem> groupEntry : content) {
		// 将分组的结果添加到list中。
		list.add(groupEntry.getGroupValue());
	}
	return list;
}

里面提到的域是在solrhome中配置的<field>标签:

<fieldType name="text_ik" class="solr.TextField">
	<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType>
<!-- 自定义域 -->
<!-- 域 -->
<field name="item_goodsId" type="long" indexed="true" stored="true"/>
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_price" type="double" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category" type="string" indexed="true" stored="true" />
<field name="item_seller" type="text_ik" indexed="true" stored="true" />
<field name="item_brand" type="string" indexed="true" stored="true" />

<!--复制域-->
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_category" dest="item_keywords"/>
<copyField source="item_seller" dest="item_keywords"/>
<copyField source="item_brand" dest="item_keywords"/>

<!-- 规格动态域 -->
<dynamicField name="item_spec_*" type="string" indexed="true" stored="true" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值