searchtb.com
域名年龄: 13年9个月9天HTTP/1.1 200 OK 服务器:nginx/1.2.5 访问时间:2015年11月04日 14:17:19 类型:text/html; charset=UTF-8 Transfer-Encoding: chunked 连接:keep-alive 动作:Accept-Encoding X-Pingback: http://www.searchtb.com/xmlrpc.php Content-Encoding: gzip 网站编码:UTF-8
Home欢迎加盟关于我们热门文章搜索技术博客-淘宝关注技术 关注搜索 关注淘宝graph database性能优化搜索引擎前端技术数据挖掘导购搜索搜索动态分布式技术其他从未降级的搜索-主搜索分层优化2015-01-04 11:11 栋宇 评论(0)摘要 多年以来,主搜索的集群架构和排序算法相对比较单一,一定程度上制约了搜索业务的发展。本文主要介绍主搜索最新采用的索引分层技术。这种分层技术把主搜索集群架构从二维扩展到了三维。基于这种三维的新架构,主搜索可以根据不同的应用场景,选择不同的检索和排序算法,从而更好的提升主搜索的检索性能与检索效果。实践表明,这种分层技术能提升主搜索120%的检索性能和6%的搜索GMV。1. 背景主搜索多年以来一直采用二维集群架构来提供淘宝网商品的检索服务,其结构如图 1所示。主要的检索流程如下: step 1. SP向QRS提交查询请求,QRS根据查询内容和Searcher的状态信息动态选择出一行searcher机器,把查询转发到这些searcher机器上进行检索。每个searcher只包含部分商品的索引,而被选择出的一行searcher则包含一个完整商品的索引。 step 2. Searcher机器根据查询,在索引的商品中检索符合查询串的商品,并对这些商品进行排序后返回top-k结果给QRS。Searcher机器之间查询是并行的处理,各searcher使用的检索与排序算法都一样。 step 3. QRS根据一定的规则对searcher返回的结果进行合并和排序,然后返回top-k’结果给SP。图1. 主搜索集群二维结构示意图 这种二维结构的集群架构和在这基础上的检索流程主要有以下几个问题:集群需要的机器多。目前主搜索需索引的商品数量近10亿。在一定的查询响应时间下,单机的索引量非常有限。例如单机索引4000万商品,那就需要25台机器才能索引完整的商品数据。为了达到一定的服务规模,需要的行数也会特别多。如果单行的服务能力为1000QPS,那么在10万QPS的压力下,需要100行,共2500台searcher机器。查询范围大,检索效率相对较低。QRS挑出的一行searcher索引了完整的商品数据。在这完整的商品中,与查询相关的商品可能有上百万个,而QRS最终只返回几十条最相关的结果给用户。因此绝大部分的商品是对查询结果没有用的,而对这些相关性小的商品的检索降低了检索的效率。主搜索中存在大量的冷门商品,它们与绝大部分的查询都不相关,索引和检索这些冷门商品都会浪费一定的资源。支持索引结构单一,可使用检索优化方法较少。因为各个searcher中索引的结构是一致的,一旦采用了一种全局序索引优化就难再使用其它的全局序优化。 单一的全局序优化虽然能提升针对这种按全局序排序的查询性能,但对其它类型的排序就会有损害。在未做分层优化之前,主搜索的索引一直采用按商品下架时间(END_TIME)全局排序后进行索引。它对按END_TIME排序的查询能提升不少性能,但对按人气或销量排序的查询就非常低效。对检索和排序的多样性支持并不友好。例如最终查询结果可能需要包含部分销量高的商品,部分相关性好的商品还需要照顾展示商品的多样性。基于这种结构需要多次完整查询才能得到结果,从而制约了相关性选择算法的问题空间。显然,上述的问题对主搜索引擎都是致命的,它从一定程度上限制了主搜索的规模以及与搜索相关的业务发展,急需要一种新的方法来解决或缓解上述的问题。2. 相关知识 在介绍主搜索具体的分层优化方法之前,我们先简单介绍一下搜索引擎中常用优化技术—索引剪枝(又称索引截断)。因为主搜索中使用三维集群架构,以及在些架构上采用的检索方法都是这些基础索引截断技术的演化版。通常索引截断可分为静态索引截断和动态索引截断:在静态索引截断中,以下三种方法比较常用:根据文档静态质量分把文档划分成多个类别。例如在全网搜索中根据网页质量可把网页划分成正常网页和垃圾网页,同样主搜索中根据商品销量等可把商品划分成热门商品和冷门商品。这样我们就可以针对不同类别文档应用不同的索引结构和检索策略以便更高效的进行大规模的文档索引与检索。根据每个索引词出现的文档按特定的特征对这些文档进行筛选。这个特征可以是文档的全局特征,也可以是term-doc的特征。例如在全网搜索中可以根据BM25分数挑出与索引词相关性程度较高的文档单独建成一个倒排链。在主搜索中可以根据商品的质量挑出与这个索引词最相关的高质量商品单独建倒排链。在搜索时,我们可以优先使用这个截断链快迅的找到与这个词最相关或最热门的文档。根据文档中每个词的特性挑选出最能代表文档内容的词来代替全文内容,以减少索引量。例如,主搜索中的每个商品只挑选商品标题和SKU中的词进入索引,以减少倒排索引的大小或减少引入不相关的内容。 动态索引剪枝的技术比较多,但其剪枝算法通常与排序模型相关。多阶段的检索与排序是目前比较常用的方法。这种方法把文档的查询与排序划分成多个阶段,越靠前的阶段计算单个文档相关性所需的时间越少,但找出的文档越多;越后的阶段计算单个文档相关性所需要的时间越多,找到的文档越少。 主搜索一直使用二阶段排序模型来优化检索的性能。第一阶段商品的海选,先前主搜索默认按商品的下架时间海选出数万个最近会下架的商品。这主要是为了照顾快下架的商品有更多的展示机会。这些选出的商品不区分质量,只匹配查询词。第二阶段商品的精选阶段,对海选出的商品利用相关性等各种特征计算最匹配几十条商品返回给用户。二阶段的排序模型给主搜索带来的很大的性能提升,但由于后面阶段的输入依赖于前面阶段的输出。例如第一阶段输出的商品质量不高,则直接影响第二阶段的排序效果。所以主搜索为了保证二阶段的商品输入的质量,从一阶段中挑选了数千个文档给二阶段排序,但这些输入的文档绝大部分最终没有返回。3. 分层优化3.1 辅链优化 主搜索先前采用的二维结构比较直观,也容易理解,但它很难满足检索性能与排序多样性的需求。主搜索的流量组成非常多样化,有来自网页、无线和各种应用的请求。在这些请求中,包含各种各样的商品排序需要,其中按人气排序和按END_TIME在主搜索查询流量中占比最大,它们分别是无线搜索与网页搜索的默认排序方式。 为了更快的支持END_TIME排序的查询处理速度,主搜索的索引一直按END_TIME全局序排序。当索引全局按END_TIME有序,就能通过二分查找快速的定位到满足查询条件商品的开始位置,可以略过很多相关但不符END_TIME的商品。但因为第一阶段的排序不包含其它信息,所以找出的文档质量参差不齐,因此需要找较多的文档给第二阶段的排序才能挑选出合适的商品给用户。 按人气排序的查询显然不能利用END_TIME排序的索引优化,所以它只能从前到后找人气高的并符合查询条件的商品。这种按人气排序的查询在一阶段选出的商品人气分很高,通
© 2010 - 2020 网站综合信息查询 同IP网站查询 相关类似网站查询 网站备案查询网站地图 最新查询 最近更新 优秀网站 热门网站 全部网站 同IP查询 备案查询
2024-05-14 06:56, Process in 0.0067 second.