电商系统之搜索系统
搜索引擎(search engine)是指根据一定的策略、运用特定的计算机程序搜集互联网上的信息,在对信息进行组织和处理后,为用户提供检索服务的系统。数据其实就是一块的砖头,当用户需要的时候我们搜索过来搬我们的宗旨就是在最段的时间内,让用户找到他们最想要的东西。
电商系统为什么需要搜索引擎
- 电商系统的商品数量『庞大』,搜索页的pv高。某宝2013年有7亿线上商品, List的pv 7亿+相当与每秒有 8000个请求
- 电商的搜索引擎并没有爬虫系统,因为所有的数据都是结构化的,一般都是Mysql或者 Oracle 的数据库,所以不用像百度一样用「爬虫」去不断去别的网站找内容,当然,电商其实也有自己的『爬虫』系统,一般都是抓取友商的价格,再对自己进行调整。
- 电商搜索引擎的过滤功能其实比搜索功能要常用,甚至大于搜索本身。什么是过滤功能?一般我们网站买东西的时候,搜了一个关健词,比如运动鞋,然后所有相关品牌或者其他分类的选择就会呈现在我们面前。对百度而言,搜什么词就是什么词,如果是新闻的话,可能在时间上会有一个过滤的选项。
- 电商搜索引擎支持各种维度的排序,包括支持人气、销量、信用、价格、发货地等属性的排序,且对数据的实时性要求非常高。对一般的搜索引擎,只有非常重要的网站,比如一些重量级的门户网站,百度的收录是非常快的,但是对那些流量很小的网站,可能一个月才会爬一次。电商搜索对数据的实时性要求主要体现在价格和库存两个方面。
- 电商搜索引擎的效果不仅要考虑买家(信息消费方,结果多样性),还得考虑卖家(信息提供方,爆光率)。
- 电商搜索引擎另一个特点就是不能丢品,比如我们在淘宝、天猫开了个店铺,然后好不容易搞了一次活动,但是却搜不到了,这是无法忍受的。除此之外,电商搜索引擎与推荐系统和广告系统是相互融合的,因为搜素引擎对流量的贡献是最大的,所以大家都希望把广告系统能跟其融合。
- 保证高可用,容灾、异常保护、降级(降级:qps维度、在clustermap上来做,正常来说,我们有20列,如果系统负载高的话查询只分部到10列,这样就高了1倍的qps) 异常保护:latency 、在searcher上来做,如果系统负载较高的话,searcher上会直接丢弃一些耗时的query
综上所述,电商系统中搜索引擎的必要性显而易见。
02
架构设计
搜索功能可通过简单的关键字搜索,后端给出一个非准确的搜索结果集,用户通过筛选条件再进一步过滤,从而得到用户最终想要的结果集。
01
页面布局
页面布局解析
一般搜索页的组成由如上图所示:
- 商品搜索词入口:用户可以输入关键字进行全文搜索
- 前台类目树(有些平台是前台后台公用统一的类目):类目分类
- 搜索引擎由三部分组成:商品属性筛选、个性筛选、商品列表组成。
- 广告推荐:有商品、店铺、文章推荐。
02
搜索引擎系统架构图
该系统真正接受用户请求并响应的系统。为了用户体验的需要,首先增加Query Processor服务,负责查询意图分析提升搜索的准确性。随着访问量的增长,接着增加缓存模块,提升请求处理性能。接着随着数据量(商品量)的增长,将CMS服务从检索服务中独立出去,成为Detail服务。数据量的进一步增长,对数据进行类似数据库分库分表的分片操作。这时候,在线检索服务由多个分片的searcher列组成。自然而然,需要一个merger服务,将多个分片的结果进行合并。
系统架构
搜索流程说明
- 客户端请求通过Load Blance到Blender;
- Blender调用QP,QP调用运营平台,其中运营平台主要负责将日常运营数据服务化,QP负责分析query;
- Blender请求page Cache和data Cache同时请求Merger调用在线搜索服务
- Merger调用UserInfoSystem获取用户标签信息;
- Merger将请求发给每列Searcher;
- 每个searcher召回商品并返给Merger;
- Merger合并多列searcher的结果,确定需要输出的商品,请求CMS封装对应的商品信息;
- CMS封装商品信息返给Merger;
- Merger将包装好的商品返给blender;
- Blender将Merger返回的结果与其他垂直搜索结果进行合并,最终返回给前端。
为了保证高召回率和低响应延时,搜索服务流程的处理全部放在内存当中进行计算。多个searcher并发处理请求,同时单个searcher内部采用线程池技术,即所有线程之间共享倒排索引和商品属性信息,提高内存使用效率;每个查询使用一个独立线程串行执行,保证并发的多个查询线程之间互不影响。此外通过合理的设置线程池的大小,保证系统的CPU资源得到充分利
多级缓存策略
Page cache:由于搜索符合互联网的二八法则,20%热门查询频度非常高,占每天搜索请求量80%。针对这一特点,搜索第一级缓存以查询请求为key,将返回给用户的页面作为value。对于完全相同的请求,直接从缓存返回结果。页面缓存策略上线伊始,缓存命中率就接近了30%,基本解决了当时的性能问题。
Data Cache:随着业务的发展,排序结果需要针对不同用户实现个性化订制,这就导致请求中会包含用户的UserInfo。如果直接将userinfo放入缓存作为key,会导致data Cache的key数量激增,不但需要超大的缓存空间,同时缓存的命中率也会极低,最终会导致线上个性化服务的体验满意度降低。为了解决这个问题,将userinfo加入key,但是value只保存排序好的商品id,这样需要的缓存空间远远小于Data cache。当命中缓存后,调用CMS直接进行结果包装。为了进一步提高缓存命中率,利用用户搜索的翻页习惯,即离线统计出用户的翻页数最大值,然后在value中缓存这些页面涉及到所有的商品id,从实践效果来看,用户后续的翻页请求大部分会命中cache。
03
索引系统
该系统是搜索技术的核心,在进入这个系统之前,搜索信息仍然是以商品维度进行存储的。索引系统负责生成一种以关键字维度进行存储的信息,一般称之为倒排索引。系统对于全量和增量的处理是一致的,唯一的区别在于待处理数据量的差异。一般情况下,全量数据索引由于数据量庞大,采用hadoop进行;实时数据量小,采用单机进行索引生产。
01
倒排索引
倒排索引(英语:Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射,它是文档检索系统中最常用的数据结构。
有两种不同的反向索引形式:
- 一条记录的水向索引(或者反向档案索引)包含每个引用单词的文档的列表。
- 一个单词的水向索引(或者完全反向索引)又包含每个单词在一个文档中的位置。
后者的形式提供了更多的兼容性(比如短语搜索),但是需要更多的时间和空间来创建。
如何构建倒排索引
E.g. 被索引的文本:
T0 = \”it is what it is\”
T1 = \”what is it\”
T2 = \”it is a banana\”
得到的倒排索引:
\”a\”: {2}
\”banana\”: {2}
\”is\”: {0, 1, 2}
\”it\”: {0, 1, 2}
\”what\”: {0, 1}
检索的条件\”what\”,\”is\”和\”it\”将对应集合的交集。
正向索引开发出来用来存储每个文档的单词的列表。正向索引的查询往往满足每个文档有序频繁的全文查询和每个单词在校验文档中的验证这样的查询。在正向索引中,文档占据了中心的位置,每个文档指向了一个它所包含的索引项的序列。也就是说文档指向了它包含的那些单词,而反向索引则是单词指向了包含它的文档,很容易看到这个反向的关系。
简单索引的文件格式
Index file可以采用闭链hash的结构来存储,这样查询效率会很高,但是空间利用率很低。也可以对Key做排序后顺序存储,查询时使用二分查找。查询效率较低,但是不会浪费内存。Doclist file的存储就很简单了,整体来看就是一个int型的数组,为了提高内存利用率,通常还会对Doclist进行压缩。
问题1
假如有7亿的宝贝,其中有1亿宝贝标题中包含”正品”这个词,那么正品这个词的倒排链长度就是1亿
解决方案
- 索引压缩:要求:在解压速度快的基础上,压缩比尽量高
- 索引截断:要求:不影响用户体验的前提下,倒排链尽量短
02
正排索引
一种索引方法,被用来存储在全文搜索下某个文档id与其对应的部分字段存储位置的映射。正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。
问题2
- 单台机器内存资源有限,如何容纳更多的文档?
- 高并发下如何快速响应请求?
解决方案
分布式的行、列概念
多行用于做负载均衡、冗余备份。如果我们一行能承担1000的QPS,那么10行就能承担1000*10的QPS,多列用于提高索引量。如果我们一台机器受限于内存只能放1000w的宝贝,那么1亿的宝贝就需要10台机器,也就是10列
在分布式集群里,通常会有多行多列。当然如果数据量足够小,可以只有一列,但是考虑到容灾备份,就算流量非常低也会有至少2行
方案一:个性化搜索
方案二:主搜索
ksearch与isearch的区别:ksearch是按key来分布数据,而isearch虽然也支持按key查询,但是主要功能是分布式。
检索过程
问题3
为什么做OR查询会比较影响性能?
- OR操作分配的内存空间不可预估,而且会很大
- 合并的时候要遍历所有的倒排链
- 倒排链越长意味着最后排序的数据就越多
03
过滤统计排序
问题4
在分布式的集群中,假设我们要取销量排序第三页的宝贝,即s=80&n=40。要如何获取?
需要考虑的问题:
我们的宝贝分布在不同的机器上,排序效率要高,也许某台机器上销量最差的宝贝也比其它机器上销量最好的宝贝要好
解决方案
每台searcher机器返回top120条结果Merger再将所有机器返回的top120宝贝混到一起,再heapsort取出top 120
04
rank
常见问题:
在人气,或者销量排序的时候马太效应怎么解决?
马太效应:宝贝销量越高排名越靠前,越靠前销量越好
首先:宝贝销量越高,确实搜索的排名会靠前,但是排名越靠前,只能说明搜索引导的成交会高一些,但是不会在大程度上影响宝贝的销量,因为搜索本身带来的成交才20-30%
常用排序规则
阿基米德排序:相关性(标题类目 亿级) + 下架时间(ends 千万级) + 宝贝人气(百万级) + 卖家质量分(十万)
人序:标题 (1)+ 类目(1)+ 宝贝人气(1)+ 卖家(0.2)
肯定不是用户想要的
单维度排序
按照:销量,信用,价格,总价,单价排序
单维度排序下不会做打散,可以认为这是用户的意愿只想找价格低的
类目混排
类目混排会对宝贝按类目进行分档,档内才按价格排序
打散:卖家打散,款式打散
05
Anti-spam
降权与屏蔽
常见的作弊类型
1、虚假交易
为了提升用户体验,保证搜索的公平性,作弊是卖家通过一些不正当的行为,提高自己的搜索排名
虚假交易,包括炒作信用和炒作销量。以增加“会员积累信用”为目的或通过炒作商品销量提高商品人气而发布的商品,会被判定为虚假交易商品。
通过发布完全相同的商品来争取更多的展现机会,直接降低了搜索的精准度,降低了消费者的购物体验,也是搜索控制的重点。
商品描述不详、无实际商品、仅提供发布者联系方式以及非商品信息的商品,判定为发布广告商品。
换宝贝:指卖家为了累积销量或人气,修改原有的商品的标题、价格、图片、详情等变成另外一种商品继续出售。
Sku作弊:滥用商品属性(如:套餐),将常规商品和瑕疵品、单机、样机、模型、二手等非常规商品放在一个宝贝里出售,且一口价为非常规商品的价格。
04
电商系统搜索和门户搜索的不同
(注解:网站的PR值(全称为PageRank),是google搜索排名算法中的一个组成部分,级别从1到10级,10级为满分,PR值越高说明该网页在搜索排名中的地位越重要)
总结
商业电商搜索算法另外两个重要技术,一个是类目体系建立和应用,另一个是个性化技术。类目体系目前主要使用机器学习的方法进行训练,个性化主要通过用户画像进行Query改写来实现。搜索算法是一个非常值得一个电商产品持续投入的技术,一方面如果技术人员要有良好的技术背景,可以借鉴很多成熟的技术,避免重复造轮子;另一方面,每个产品的搜索都有自身的特点,需要深入研究产品的特性给出合理的解决方案。
50个设计构建个人网站ChatGPT提示词-无代码
#设计和构建个人网站
1. What are the benefits of using no-code platforms for website building?
使用无代码平台进行网站建设有什么好处?
2. What are the most popular no-code website builders currently available?
目前最受欢迎的无代码网站建设者是什么?
3. How do I choose the right no-code website builder for my project?
我如何为我的项目选择合适的无代码网站建设者?
4. How do I get started with designing my website on a no-code platform?
如何开始在无代码平台上设计我的网站?
5. How do I add pages, navigation, and other elements to my website using a no-code platform?
如何使用无代码平台将页面、导航和其他元素添加到我的网站?
6. How do I customize the look and feel of my website using a no-code platform?
如何使用无代码平台自定义网站的外观?
7. What options do I have for integrating third-party tools and services into my website using no-code?
我有什么选择可以在不使用代码的情况下将第三方工具和服务集成到我的网站中?
8. How do I make sure my website is mobile-friendly using a
no-code platform?
如何使用无代码平台确保我的网站对移动设备友好?
9. What steps do I need to take to launch my website using a no-code platform?
使用无代码平台启动我的网站需要采取哪些步骤?
10. Can I use a no-code platform to build an e-commerce website?
我可以使用无代码平台来建立电子商务网站吗?
11. What are the limitations of using a no-code platform to build a website?
使用无代码平台建立网站有哪些限制?
12. How do I handle SEO for my website when using a no-code platform?
使用无代码平台时,我如何处理网站的SEO?
13. What resources are available to help me learn more about using no-code for website building?
有什么资源可以帮助我了解更多关于使用无代码进行网站建设的信息?
14. Can I hire a professional to help me build my website using a no-code platform?
我可以聘请专业人士帮助我使用无代码平台构建网站吗?
15. How much does it cost to build a website using a no-code platform?
使用无代码平台建立一个网站需要多少钱?
16. Can I create a custom domain for my website using a no-code platform?
我可以使用无代码平台为我的网站创建一个自定义域吗?
17. How can I get support if I run into issues while building my website using a no-code platform?
如果我在使用无代码平台构建网站时遇到问题,如何获得支持?
18. How do I maintain and update my website after it has been built using a no-code platform?
使用无代码平台构建网站后,我如何维护和更新网站?
19. What are some examples of websites built using no-code platforms?
使用无代码平台构建网站的一些例子是什么?
20. What kind of websites can be built using a no-code platform?
使用无代码平台可以建立什么样的网站?
21. How do I add custom code to my website if needed when using a no-code platform?
在使用无代码平台时,如果需要,我如何将自定义代码添加到我的网站?
22. How can I add forms and other interactive elements to my website using a no-code platform?
如何使用无代码平台将表单和其他交互元素添加到我的网站?
23. What options do I have for hosting my website when using a no-code platform?
当使用无代码平台时,我有什么选择来托管我的网站?
24. How can I use no-code to create a landing page for my website?
如何不用代码为我的网站创建登录页?
25. How do I make sure my website is accessible and inclusive using a no-code platform?
如何使用无代码平台确保我的网站可访问且具有包容性?
26. How do I add and manage images and other media on my website using a no-code platform?
如何使用无代码平台在我的网站上添加和管理图像和其他媒体?
27. How can I add blog functionality to my website using a no-code platform?
如何使用无代码平台将博客功能添加到我的网站?
28. Can I use a no-code platform to build a website for a business or organization?
我可以使用无代码平台为企业或组织建立网站吗?
29. How do I add e-mail sign-up forms and newsletters to my website using a no-code platform?
我可以使用无代码平台为企业或组织建立网站吗?
30. How can I track website analytics using a no-code platform?
如何使用无代码平台跟踪网站分析?
31. Can I use a no-code platform to build a portfolio website for my creative work?
我可以使用无代码平台为我的创意工作建立一个投资组合网站吗?
32. How can I add social media integration to my website using a no-code platform?
如何使用无代码平台将社交媒体集成添加到我的网站?
33. Can I use a no-code platform to build a website for a non-profit organization?
我可以使用无代码平台为非营利组织建立网站吗?
34. How can I add a search function to my website using a no-code platform?
如何使用无代码平台为我的网站添加搜索功能?
35. How do I ensure the security of my website when using a no-code platform?
在使用无代码平台时,我如何确保网站的安全?
36. What is the process for publishing and launching a website using a no-code platform?
使用无代码平台发布和启动网站的过程是什么?
37. How can I integrate payment systems into my e-commerce website using a no-code platform?
如何使用无代码平台将支付系统集成到我的电子商务网站中?
38. Can I use a no-code platform to build a website for a local business or small enterprise?
我可以使用无代码平台为当地企业或小企业创建网站吗?
39. How do I ensure that my website loads quickly and efficiently when using a no-code platform?
在使用无代码平台时,我如何确保我的网站快速高效地加载?
40. How do I add a custom favicon to my website using a no-code platform?
如何使用无代码平台将自定义收藏夹添加到我的网站?
41. How can I add Google Maps integration to my website using a no-code platform?
如何使用无代码平台将谷歌地图集成添加到我的网站?
42. What options do I have for integrating email marketing into my website using a no-code platform?
使用无代码平台将电子邮件营销整合到我的网站中,我有什么选择?
43. How do I add customer reviews and testimonials to my website using a no-code platform?
如何使用无代码平台将客户评论和推荐添加到我的网站?
44. How can I add a contact form to my website using a no-code platform?
如何使用无代码平台将联系人表格添加到我的网站?
45. What resources are available to help me troubleshoot issues while building my website using a no-code platform?
在使用无代码平台构建网站时,有哪些资源可以帮助我解决问题?
46. How can I use a no-code platform to create a website for a community or social network?
我如何使用无代码平台为社区或社交网络创建网站?
47. How can I add a photo gallery to my website using a no-code platform?
如何使用无代码平台将照片库添加到我的网站?
48. What options do I have for adding custom fonts and typography to my website using a no-code platform?
使用无代码平台向我的网站添加自定义字体和排版,我有什么选择?
49. Can I use a no-code platform to build a website for a personal blog or diary?
我可以使用无代码平台为个人博客或日记建立网站吗?
50. How can I optimize my website for search engines using a no-code platform?
如何使用无代码平台为搜索引擎优化我的网站?
##ChatGPT #提示词
干货:什么是亚马逊upc代码?怎么设置?
随着越来越多的卖家选择在网上市场上进行销售,电子商务继续增长。随着电子商务的发展,电商平台也在发展。例如,像亚马逊这样的在线市场上有多个可用的产品类别,大多数商品都附有见地的客户评论,以及指导购物者的搜索历史,类似这样的功能为客户带来了愉快的购物体验。
电子商务发展的另一种方式是实体零售原则在网上出现。例如,你当前如何跟踪和管理库存?在实体零售中,每个产品上都印有UPC代码。每次销售产品时,库存都会更新。现在,相同的方法也适用于在亚马逊上出售的产品:你出售的每个产品都必须具有唯一的标识码。虽然客户在线购买商品时你无需扫描条形码,但在亚马逊商店中使用UPC代码可以自动跟踪库存。
在亚马逊上,没有UPC代码就无法上架产品。本文汇总了相关指南,以帮助卖家弄清楚在哪里购买UPC代码以及如何在亚马逊中设置代码。
什么是UPC代码?
UPC代码,或通用产品代码,是一种最多12位的条形码,用于识别单个产品。
在亚马逊市场上,UPC代码的作用与你在实体产品上看到的条形码非常相似,它们可帮助识别站点上的每个产品以及它们来自的商店。
在亚马逊上使用UPC代码的主要好处之一是FBA。如果你使用亚马逊FBA来完成你的亚马逊订单,则会自动为你跟踪库存。例如,如果你销售来自供应商的产品,其他亚马逊卖家也可能也会这样做。每个产品都有相同的制造商条形码——这有点像在不同的实体店找到一双同样的鞋。
假设你销售手机壳。当客户从你的产品页面购买商品时,亚马逊会查看哪个卖家的库存最接近该客户。亚马逊代表你发送产品,即使产品不是来自你的库存,你也会获得销售的信用。作为补偿,亚马逊将从你的库存中运送相同的产品给原始产品的卖家:
UPC代码使这种类型的履行和转移过程顺利,并确保所有参与的FBA卖家的库存编号都是最新的。
接下来,本文将介绍如何购买和使用亚马逊UPC代码。
你准备好创建listing时,有三种情况需要考虑:
(1)你自己生产制造产品,需要亚马逊的UPC代码;
(2)你已从供应商那里订购了产品,并拥有制造商的代码;
(3)你已从供应商那里订购了产品,但没有制造商的代码。
每种情况获得UPC代码的方式略有不同。
01
为自己制造的产品购买亚马逊UPC代码
如果你自己制造产品,你会发现有很多出售UPC代码的网站。避免从这些渠道购买,因为很有可能这些代码已经被使用,并可能导致你的listing被亚马逊删除。更好的方法是通过GS1美国网站申请购买亚马逊的UPC代码。GS1 US为UPC代码设定了全球标准,所以你可以信任它。
为自己制造的产品购买亚马逊UPC代码有四个步骤:
(1)申请公司前缀。该代码是六位数字,出现在所有UPC代码的前面。在这个阶段,你还必须决定需要多少个UPC代码;确定你的定价计划,因为需要支付初始费用和续费。
(2)确认每个产品的唯一产品编号。确定你要销售的产品包装类型,例如,case、bundle、pallet等。这将为你提供GTIN条形码。
弄清楚代码将如何出现在你的产品上。在这里,你可以指定是否需要在结帐时扫描的条形码,是否要在线销售产品以及是否需要仓库条形码。
(3)测试你的条形码,以确保它们可以正常工作之后下订单。亚马逊会定期检查你添加到产品listing上的条形码,并与GS1 US的数据库进行比对,以确保你的条形码是合法的。如果亚马逊发现你的代码不在GS1数据库中,你将面临listing被删除的风险。
02
具有制造商代码
如果你从供应商处购买产品,且它们具有制造商的条形码,则在创建listing时可以使用这些UPC代码。
当你创建卖家帐户时,系统会自动设置为使用制造商的代码来跟踪用于FBA目的的库存。你可以随时更改此设置,具体取决于你是想自己履行订单还是使用FBA。
03
没有制造商的代码
你可能会遇到供应商未提供制造商条形码的情况。如果发生这种情况,你必须使用亚马逊条形码——亚马逊标准识别码(ASIN)——来代替。
你可能还会遇到无法用制造商的条形码跟踪所销售产品的情况。这些产品还需要一个ASIN。属于这一类别的产品包括:护肤霜、洗发水和化妆品等外用产品。
如何将UPC代码添加到亚马逊
获得UPC代码后,就可以在Amazon上创建listing了。在创建页面上,有一个名为“Product ID”的字段,你可以在其中输入UPC代码。
请记住,与你自己创建的listing的其他方面(如描述和图片)不同,你无法创建自己的产品ID。必须通过上述渠道之一才能获得批准的条形码。
当你在亚马逊上输入UPC代码时要记住一些准则:
从信誉良好的网站购买代码。在某些站点上,你可以以几美元的价格批量购买UPC代码,但是,不要被一些网站的低价标签所分散。这可能会导致亚马逊认为你使用回收代码并删除你的listing。
为每个产品创建唯一的代码。你销售的每个产品变体都需要自己的代码。例如,如果你在线销售背包,并且一种样式有五种不同的颜色,则该背包样式需要五种不同的UPC代码。
如果在亚马逊上转售产品,请使用制造商的UPC代码。不要为你没有生产的产品创建一个新的UPC代码——如果你这样做,账户有被关闭的风险。如果没有UPC代码,你可以向亚马逊申请GS1豁免。(来源:卖家之家 文/LEO)
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。