Solr的facet和grouping在电商商品搜索中的使用

自动驾驶安全员监控系统:从DMS定制化到人机共驾安全新范式 驾驶员监控系统(DMS)作为保障行车安全的关键技术,通过摄像头与传感器实时监测驾驶员的疲劳与分心状态,其核心原理在于计算机视觉与行为分析算法的结合。在高级辅助驾驶与自动驾驶测试领域,DMS的技术价值从被动警报演变为主动的安全协作节点,是构建冗余安全体系的重要一环。尤其在自动驾驶测试车等特定应用场景中,通用DMS因任务范式不同而面临“水土不服”的挑战,无法准确识别安全员“监控系统”所需的发散性注意力模式,甚至可能因误报成为干扰源。这催生了面向“人机共驾”的定制化监控解决方案,其通过软硬件协同设计,重新定义“正 阅读详情

转载:http://mlcsdev.iteye.com/blog/2048371 

电商网站中,搜索业务线是直接与用户交互的重要部分,除了提供基本的关键词查询之外,提供一些导航性质的条件供用户选择,能有效提高用户体验效果。

       本文关注三个功能

       一. 页面左侧的多级类目导航:

                           
       二. 例如上部的属性筛选:

                             
        三. 商品多规格的折叠展示:

                           
          使用solr自带的facet和grouping 能帮助我们轻松实现这样的效果。其中前两个使用的是facet。

 

       (一)、首先是类目导航问题, 类目导航通常要显示多级类目的层次关系 以及 这次搜索下各个类目所含商品的数量。不同的电商可能商品类目设计不一样,可能只有一层或者多层类目。solr的facet能够对结果进行聚合统计,类似数据库的count(*) group by 功能。如果是要facet多层,目前有两种办法:1 使用facet.pivot; 2 预先把类目层次组合成一个字段进行facet。   第一种facet.pivot就是为了层次树而进行,可以对任意不同字段组合facet产生一颗层次树,但是在solrcloud环境下不支持。第二种功能缺点是不能动态组合不同字段,而且需要再对结果进行一次拆封聚合。

        类目导航除了提供商品数量,通常还有一个交互需求是要用户点击了某个分类链接之后,查询商品范围缩小,但这个类目导航依旧不变,也就是导航不会受到查询自己影响。以前不知道的时候觉得可能需要两次查询才能满足这个需求,后来经过求索得知solr的facet也有这样的能力:需要配合fq。具体办法是,在fq中加入标记的类目查询条件,然后再facet上加入排除对应的标记

         例如这样fq={!tag=xxx}field:value,相应的facet.field={!ex=xxx}fieldx。 语义就是field:value的条件生效,但facet fieldx这个项是排除了xxx代表的条件。 其中{!tag=}和{!ex=}是对应的标记,field那些参数还是按正常写法,xxx要一样,否则就排除不掉这个了。这样的排除后facet 可以同时写多组,这样我们就得到了点击类目对应类目导航不变的功能。

 

        (二)、然后是属性筛选部分,这部分可以更直接, 将商品的所有的属性名属性值  存成以key_value形式进一个字段,比如存成一个用逗号分隔的text类型: "key1_value1,key2_value2,key3_value7,..." ;或者用multivalue形式的string类型: ["key1_value","key2_value2","key3_value7"]。对字段进行facet之后,需要再根据key_value拆分聚合成相同的属性行。key_value可以存中文串也可以存id格式,id形式的对URL友好一些。

 

         (三)、最后介绍同款商品折叠问题,这部分和商品管理有关系,通常一款商品有多个规格,也就是SPU包含多个SKU。如果商品比较少的搜索展示SKU比较好,但如果卖的都是一些多规格的商品显然展示SPU更好。在我们的产品设计中有几个核心要求,a). 规格也会成为一种属性可以到上面说的第二部分进行筛选;b). 搜索列表折叠之后,只需展示有异图的规格,举例来说就是一个鞋子 颜色规格会有很多异图,但尺码不会有异图,如果这两个规格是5*5=25种SKU,那么折叠之后只展示5个不同颜色的小图。c) 规格属性筛选之下异图也要跟着变,也就是搜了红色就不要再展示其他颜色的规格小图了

         在设计如何套用solr来搜的时候,我考虑过两个方案:1. SPU做成一个doc; 2. SKU做成doc。 第一种方案显然更直接,但为了照顾属性问题,需要把SPU做成所有属性都必须包含,否则属性筛选可能会漏掉,那么为了照顾c功能,就得手动再过滤其他规格。但有一种特殊情况不可避免,比如某两个规格的SKU正好是没有的,但是SPU搜出来过滤之后发现该SPU应该不要,那么其他功能的统计数字就不准了。因此考虑第二种方案,得使用grouping,根据各资料表明性能会有影响,但功能上abc需求可以完全覆盖到,其中的异图就是SPU下不同SKU的主图。

       具体的,开启grouping之后,需要使用group.ngroups来表示SPU命中数量,另外为了让类目导航的数字显示为spu的,要开启group.facet=true,这个group.facet貌似可以指定到field上,可以为不同的字段提供不同的数字比如f.xxxx.group.facet=true 表示xxxx使用grouping后的统计值。如果false 就是doc上facet的统计值。另外注意group.facet所使用的不是一个组里只挑选一个出来facet,例如某个组G下有3种不同值xyz,facet出来每个xyz各算1。电商中同款商品基本是同一个类目下的,所以不用担心影响类目导航的统计数。

       全局sort会影响不同grouping之间的排序,但不影响组内排序。{ 根据b需求,如果要获得所有异图,可能需要把全组的doc都取出来遍历,如果规格范围很大的话可能需要把大量doc都取出来,这需要大量网络solr通信传输量。如果能根据group.limit来取出异图最大可能数的doc 便有可能大大降低网络消耗。因此组内排序方式应该是 全局排序+异图排序。异图排序就是让不同规格排序时候 每次都是一组异图一组的顺序,例如上面5*5的例子,应该排出 红黄蓝绿黑红黄蓝绿黑红黄蓝绿黑红黄蓝绿黑红黄蓝绿黑的顺序,即便不是(红黄蓝绿黑)顺序 也要把这5种颜色在前五位置排出来。办法是用一个排序字段image_rating: 每种颜色的商品用另外规格id(有另外规格就用,没有就随便一个数字)来做该image_rating。} 说了半天那么复杂的考量,现实可能未必需要计较那么多。

        grouping毕竟是一个消耗的操作,自solr 4.6开始增加了一个field collapse功能,可以在排序前把相同的sku过滤到只剩一个,但功能上只是一个post filter,不能做grouping那么强的能力,官方建议用在数据量较大时候的去重。我认为如果对技术要求比较高的话也十分有必要进行一番研究。

 

         说了这么多,还是需要自己亲自各种尝试才能更好的使用solr去完成业务。solr可用的功能非常多,完成需求的路线也很多,因此有盈余的开发者应该多深入一下solr。

solr实现京东搜索 使用Solr实现电商网站中商品信息搜索功能。 1、 可以根据关键字搜索商品信息 2、 可以根据商品分类、价格过滤搜索结果 3、 可以根据价格进行排序 4、 实现分页 立即下载

相关推荐

LabVIEW内存优化实战:用DVR和队列高效处理大型数组,告别数据副本

本文深入探讨LabVIEW内存优化技术,重点介绍数据值引用(DVR)和单元素队列(SEQs)在高效处理大型数组中的应用。通过对比传统方法与现代引用技术的性能差异,提供减少内存副本、提升程序效率的实战方案,帮助开发者在测试测量、图像处理等数据密集型场景中实现显著性能提升。

weixin_30835649的博客 1061

solr高级使用之group和facet

Group对比Facet Group和Facet的概念很像,都是用来分组。Facet返回所有相关的结果并允许用户基于facet的目录重新定义结果集。Facet可以对分组数量进行过滤,以及排序,和日期范围,时间范围分组,但是如果你想得到具体的数据,还得需要查询一次或多次。group可以得到分组的组数量,一次请求,可以拿到所有的数据。 Group和Facet可以结合起来使用,但只能使用facet....

lyf_ldh的博客 2603

图像去模糊(二)——Richardson–Lucy算法

Richardson Lucy Algorithm(Richardson-Lucy算法详解及效果实例)

xueruhongchen的博客 3万+

solr中facet和group的使用

solr中进行分组统计的应用例子: public class solr { String url = ""; SolrServer server = server = new HttpSolrServer(url); SolrQuery query = new SolrQuery(); query.setQuery("*:*"); query.setParam(GroupParams

性感的IT男 1304

从DeepMimic到虚拟偶像:用动作捕捉数据训练AI跳舞的完整流程(附Blender插件配置)

本文详细介绍了如何利用DeepMimic的深度强化学习框架,将动作捕捉数据转化为虚拟偶像或游戏角色的舞蹈动作。从核心的模仿学习理念、PyBullet环境搭建、策略网络与奖励函数设计,到数据处理、训练技巧(如参考状态初始化),最后讲解了如何将训练好的AI模型集成到Blender和Unity等工具中,实现从数据到实时驱动角色的完整流程。

weixin_29054399的博客 504

Robocup3d

一、 比赛介绍 RoboCup 仿真比赛是一个能为多智能体系统和模拟智能进行研究、教育的工具。比赛是在一个标准的计算机环境中进行的,提供了一个完全分布式控制、实时异步多智能体环境。通过这个平台,可以测试各种理论、算法和Agent体系结构。在实时异步、有噪声的对抗环境中,研究多智能体的合作对抗问题。当然,仿真组的比赛使用的机器人并非是真的机器人。一个机器人是一个Agent, 它拥有自己的大脑,

zhanghe2775115的专栏 7265

Solr中Facet用法和Group用法

group用法: //组查询基础配置 params.set(GroupParams.GROUP, "true");  params.set(GroupParams.GROUP_FIELD, "dkeys"); params.set(GroupParams.GROUP_LIMIT, "5");  params.set(GroupParams.GROUP_FORMAT, "grouped")

飞鸟快快的专栏 5649

Unity技能系统核心:从理论到实践构建可扩展的Buff管理器

本文深入探讨了Unity游戏开发中构建可扩展技能系统的核心——Buff管理器。通过剖析三层架构(数据、逻辑、渲染)与独立组件管理模式,提供了从Buff数据定义、管理器核心实现到可视化编辑器搭建的完整实践方案,旨在解决技能系统维护难题,提升开发效率与代码质量。

weixin_29002209的博客 253

solr高级查询——group和facet

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33779515的博客 192

通过python+openCV实现对图片中箭头方向的判断

摘要: 针对YOLOv8算法在箭头方向识别效果不佳的问题,提出了一种基于OpenCV的解决方案。该方法通过图像预处理、轮廓分析、几何特征提取(凸包、质心、外接矩形)和方向向量计算,准确判断箭头的上下左右方向。代码示例展示了从图像读取到方向识别的完整流程,并提供了优化建议(如调整二值化阈值、处理多轮廓)。该方案在Windows11+Python3.12+OpenCV环境下验证有效,适用于需要简单几何特征分析的箭头方向检测场景。

AnChenliang_1002的博客 702

I2C 协议在 Camera Sensor 驱动中的典型配置方式与实战应用

在 Linux Camera 系统中,Sensor 与主控之间的控制信令几乎都依赖于 I2C 总线完成。I2C 协议不仅承载了 Sensor 初始化、模式切换、AE/AF 等关键功能的指令传输,也是构建 v4l2\_subdev 驱动框架的核心基础。本文将围绕 Sensor 驱动中的 I2C 通信机制展开分析,从设备树节点声明到驱动代码中的传输接口调用,结合主流平台工程实战经验,详解如何构建稳定、高效、可维护的 I2C 控制路径。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1713

SOLR在电商中的基本应用

SOLR在电商中的基本应用 高级的全文搜索功能 专为高通量的网络流量进行的优化 基于开放接口(XML和HTTP)的标准 综合的HTML管理界面 可伸缩性-能够有效地复制到另外一个Solr搜索服务器 使用XML配置达到灵活性和适配性 可扩展的插件体系 环境搭建略。字段的基本设计 字段仅添加搜索相关的字段,比如商品id、标题、品牌名称、分类名称,商品价格、上架时间

我会唱小星星 4684

从微服务到 Agent 服务:架构思维的迁移

微服务的概念最早在2014年由Martin Fowler提出,核心是“将单体应用拆分为一组小的服务,每个服务运行在独立的进程中,服务之间采用轻量级的通信机制互相协作,每个服务围绕具体业务构建,并且可以独立部署到生产环境”。单一职责:每个微服务只负责一个业务领域的功能,比如订单服务只处理订单相关的逻辑,用户服务只处理用户相关的逻辑被动响应:微服务是“哑的”,只有收到外部请求的时候才会执行逻辑,本身没有主动决策的能力固定流程:微服务的逻辑是硬编码的,执行流程是提前定义好的,只能按照程序员写的代码处理请求。

AI智能探索者的博客 275

Solr Facet技术的应用与研究

问题背景 在《搜索引擎关键字智能提示的一种实现》一文中介绍过,美团的CRM系统负责管理销售人员的门店(POI)和项目(DEAL)信息,提供统一的检索功能,其索引层采用的是SolrCloud。在用户搜索时,如果能直观地给出每个品类的POI数目,各个状态的DEAL数目,可以更好地引导用户进行搜索,进而提升搜索体验。 需求分析 例如,下图是用户搜索项目(DEAL)的界面,当选中一个人或者组织节点后,需要实时显示状态分组和快捷分组的每个项的DEAL数目: 为了实现上述导航效果,可以采用以下两个方案: ..

一个有情怀的程序猿博客 523

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Solr之Facet与FacetPivot的使用和区别

1、基本定义理解 Facet是根据field来进行分组统计,可以得出所有指定Field的统计结果,具体有哪些参数配置,参考:https://blog.youkuaiyun.com/weixin_43231076/article/details/102685185 FacetPivot与Facet的功能很相似,但是它可以指定多个field,也就是多个维度来分组统计,并且统计出来的结果可以整理成Tree的结构 2...

songsong_DBB的博客 1290

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

8.solr学习速成之FacetPivot

什么是Facet.pivot Facet.pivot就是按照多个维度进行分组查询,是Facet的加强,在实际运用中经常用到,一个典型的例子就是商品目录树 NamedList解释: NamedList,一个有序的name/value容器,NamedList不像Map,他具有以下特点: 1、名字可以重复 2、NamedList中的element保持这有序状态 ...

weixin_30711917的博客 217

Solr的学习使用之(九)facet.pivot实战

facet.pivot自己的理解,就是按照多个维度进行分组查询,以下是自己的实战代码,按照newsType,property两个维度统计: public List<ReportNewsTypeDTO> queryNewsType( ReportQuery reportQuery) { HttpSolrServer solrSer...

weixin_30906701的博客 168

电商项目solr实战

    本课程全程使用目前比较流行的开发工具idea进行开发,涉及到目前互联网项目中最常用的高并发解决方案技术, 如dubbo,redis,solr,freemarker,activeMQ,springBoot框架,微信支付,nginx负载均衡,电商活动秒杀,springSecurity安全框架,FastDFS分布式文件服务器,还会涉及到代码生成器,   前台的技术有angularJS和BootStrap框架,此课程内容丰富实战性强,如果你还是传统项目的开发人员,那你学完本课程会有很大的收获,让你的薪资上涨,5K以上,让你完全感受到了互联网思维带来的高 并发解决方案的思路,如果你是开发的小白,建议你学完Spring,SpringMVC,MyBatis框架后再来学习本门课程,学完以后会让你完全体验到企业级开发的流程.在职开发人员学完后会让你的薪资更高,让你更了解互联网是如何解决高并发 学完SSM框架的同学就可以学习,能让你切身感受到企业级开发环境目标1:完成solr环境安装、中文分析器和业务域的配置目标2:会使用Spring Data Solr完成增删改查操作目标3:完成批量数据导入功能目标4:完成按关键字搜索功能目标5:实现考拉易购搜索结果高亮显示功能目标6:说出考拉易购搜索的业务规则和实现思路目标7:完成查询分类列表的功能目标8:完成缓存品牌和规格数据的功能目标9:完成显示品牌和规格数据的功能目标10:完成过滤条件构建的功能目标11:完成过滤查询的功能目标11:实现考拉易购价格区间筛选功能目标12:实现搜索结果分页功能目标13:理解多关键字搜索目标14:实现搜索结果排序功能目标15:实现隐藏品牌列表功能目标16:实现搜索页与首页对接功能目标17:完成更新索引库的功能

solr 之多维度分组查询facet.pivot

参看 :http://blog.youkuaiyun.com/a925907195/article/details/42241265主要是获取的结果处理逻辑这段sQuery.add("facet.pivot", "newsType,property");//根据这两维度来分组查询     sQuery.setQuery(para); QueryResponse ...

u013045102的专栏 1398

Solr分组聚合查询之Facet

摘要: Solr的分组聚合是一个笼统的概念,目的就是把查询结果做分类,有多种方式可以做到很类似的结果。也正是由于它们的不同表现,可以适合于多种场景。何为FacetFacet是一种手段,用来将搜索结果分类,它并不会修改查询结果信息,只是给分类后的结果加上了每一项的数量值。我们可以用facet来做导航栏,引导用户更精确地查找信息。一般参数 参数 说明 facet 布尔值,设置为true,表

随-记的专栏 7485

Solr Facet参数

1.将查询的row设置为0,不显示不需要的结果。 2.facet=tue,增加分类汇总 3.facet.field=type,按照哪个字段分类, 4.facet.limit=100,最多显示前100个分类 示例:http://localhost:8080/solr/core0/select/?q=*%3A*&version=2.2&start=0&rows=0&indent=on&face

疯狂的葡萄 1585

Solr学习总结(六)SolrNet的高级用法(复杂查询,分页,高亮,Facet查询)

上一篇,讲到了SolrNet的基本用法及CURD,这个算是SolrNet 的入门知识介绍吧,昨天写完之后,有朋友评论说,这些感觉都被写烂了。没错,这些基本的用法,在网上百度,资料肯定一大堆,有一些写的肯定比我的好,不 过,这个是Solr系列文章,会从Solr的基础入门讲到实际开发中的分页,高亮,Facet查询等高级用法。所以,基础的入门也会涉及一些...

weixin_34293911的博客 245

Solr应用之电商商品搜索备忘

把以前做电商商品搜索的经验总结一下,

lgnlgn的专栏 4353
上一篇: 学习PHP-MSF:搭建开发环境
下一篇: 开发网址大全
love小在在
博客等级 码龄20年 8粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值