电商项目中的solr

solr的要学会的点:1. 使用springData Solr 实现增删改查 2、完成批量数据导入功能 3、完成搜索高亮显示 4. 说出搜索的业务规则和实现思路 5. 过滤查询

  1. 为什么会出现solr?
    大多数的搜索引擎都具有搜索功能,但是搜索功能往往是巨大资源的消耗,会由于沉重的数据库加载而拖垮你应用的性能。
    这也就出了转移负载到外部的服务器的注意, 然而 solr 就是一个流行的开源的搜索服务器。solr可以和hadoop一起使用,hadoop 处理大量的数据,solr 从这么多数据中找到所需的数据,
    ,不仅是搜索,solr 也可以达到存储的目的,是一个非关系型数据存储和处理技术。

  2. solr 系统的环境搭建:
    1. 导坐标。 2. 引入相关依赖。 3. 添加web.xml 4.

  3. 在项目中怎么是使用的solr?
    因为搜索并发压力非常大,我们根据面向服务分布式拆分规格,我们把搜索系统拆分出来一个独立的项目,有利于项目并发能力的提升。

  4. solr 中的域 就相当于 数据库中的表数据,用于存储用户数据。、
    域分类: 1. 一般域:对应数据库中的一般字段。、
    2. 复制域:把一个或者几个域中的数据复制到另一个域中。 就比如说搜索“手机”。搜到了好多页的关于手机的商品,但是有的商品标题titile 中并没有手机这两个字,
    是因为,手机两个字存在于广告、详情域中,也就是这些域都复制到了 一个域中,而搜索的就是这个被复制到好多个域的 域中的内容。
    3. 动态域:就是可以动态的扩充字段。 比如手机有内存、尺寸两个属性, 然而衣服只有一个尺寸的属性, 所以会用到动态域。我们在项目中的规格中用到了动态域。
    域怎么配去哪里配呢?索引库/conf/schema.xml 中配置。
    域的常用属性:name、type、indexed、stored、required

  5. springDataSolr
    1. 为什么会出现SpringDataSOlr? 为了将 solr 应用集成到 Spring 中。
    2. 怎么使用SpringDataSolr? 1. 导入依赖spring-data-solr 2. 创建application-solr.xml(1. 里面配置solr 服务器地址。2. solr 模板,通过模板对索引库进行增删改查。)
    2. @Field 注解的使用: 如果代码中的属性名称和 solr配置文件中域的名称不一样,需要使用@Field 指定域名称。
    3. 增加solrTemplate .saveBean(item)
    4. 提交solrTemplate .commit();
    5. 按主键查询solrTemplate.getById(1,Tbitem.class)。
    6. 按主键删除solrTemplate.deleteById(“1”);
    7. 分页查询 Query query = new SimpleQuery();
    query.setoffset(20)//开始索引(默认0)
    query.setRows(20)//每页记录数(默认10)
    ScoredPage page = solrTemplate.queryForPage(query,Tbitem.class)
    8. 条件查询: Query query = new SimpleQuery();
    Criteria criteria = new cirteria(“item_title”).contains(“2”);
    criteria = criteria.and(“item_title”).ccontains(“5”)
    query.addCriteria(criteria)
    9. 删除全部数据 Query query = new SimpleQuery();
    solrTemplate.delete(query);
    3. 怎么完成对数据的批量导入功能。 1. 查询商品的数据列表: 创建类solrUtil,实现对商品数据的查询。
    2. 数据导入solr索引库 1. 添加solr 配置文件即 配置solr 服务器地址和solr模板。
    2. 调用模板类导入solr。
    3. 规格导入动态域 1. @Dynamic 注解
    2. 修改SOrlUtil 类,即 引入fastJSON依赖。使用JSON.parseObject(item.getSpec())//将spec字段中的json字符串转为map。

导入商品数据代码 TbItemExample example=new TbItemExample();
Criteria criteria = example.createCriteria();
criteria.andStatusEqualTo(“1”);//已审核
List itemList = itemMapper.selectByExample(example);
System.out.println("=商品列表=");
for(TbItem item:itemList){
Map specMap= JSON.parseObject(item.getSpec());//将 spec 字段中的 json 字符
串转换为 map
item.setSpecMap(specMap);//给带注解的字段赋值
System.out.println(item.getTitle());
}
solrTemplate.saveBeans(itemList);
solrTemplate.commit()

	4. 搜索 高亮显示:。		1. HighlightQuery query=new SimpleHighlightQuery();//设置高亮的域		query.setHighlightOptions(highlightOptions);//设置高亮选项 															
								2. 测试发现html代码原样输出,是因为AngularJS为了防止攻击采取了安全机制。所以用到了 trustAsHtml 方法。$sce.trustAsHtml(data); 		
								
	5. 实现思路:		1. 搜索面板的商品分类是使用 springDataSOlr 的分组查询来实现的。
						2. 为了提高查询速度,我们提前把查询面板的品牌、规格数据 存放到redis中。
						3. 后端的分类、品牌、规则、价格查询 要使用 过滤查询 来实现。    
								过滤查询代码实现思路: 1. 从参数对象中获取品牌参数	2. 判断品牌过滤参数是否为空 3. 新建criteria对象 4. querySimpleFilterQuery()
	
	6. 排序		1. 按价格排序   	 	a. 查出来是哪种排序 searchMap.get("sort");//ASC  DESC 
										b. if 判断 是ASC 还是 DESC  ,根据。equals(“”)  来判断。
										c. if循环语句中,判断出来了是ASC 之后, 使用  sort.Direction.ASC,"item_"+sortFiled  会得到 sort。
										d. 最后query.addsort(sort) 即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值