閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程

搜索是電商平臺的核心流量入口,承載著平臺主要的成交引導意圖收斂活動投放。一個穩定、高效、可擴展的搜索系統是電商平臺得以生存發展的基石。本文探討如何構建完善的商品搜索系統, 并根據閑魚二手交易的差異化特性介紹閑魚搜索系統的時效性優化

首先,構建一個搜索系統:電商場景的搜索

搜索引擎

搜索系統的核心是搜索引擎,目前Lucene、ElasticSearch等開源引擎已十分成熟,阿里云也提供完整的搜索解決方案-OpenSearch,包含基于Ha3的搜索引擎(Heaven ask 3)及系列管控工具。這里,我們簡單描述下搜索引擎內的基本概念作為導引,不過多深入引擎的具體實現(那將是一個冗長的話題,網絡上的資料也隨處可見)。 搜索引擎的基本概念
  • ? 分詞 通過一定規則對文本分出單詞,每個單詞作為搜索的最小粒度單元。只有單詞匹配,文檔才能被召回,因此分詞的準確是搜索精準的基礎。如“紅色摩托車” 被分詞成“紅色”, “摩托車”, 那它將被“摩托車”或者“紅色”召回, 如果分詞成“紅色摩托”, “車”,那它在引擎中被搜索出的概率就將大打折扣。
  • ? 索引
    • ? _ 紅色蘋果手機, doc1_
    • ? _ 紅色蘋果, doc2_
    • ? “紅色”,“蘋果” -> doc1, doc2
    • ? _“手機” -> doc1 _
    • ? 倒排索引 稱為反向索引、置入檔案或反向檔案,是一種索引方法。被用來存儲在全文搜索下某單詞在文檔存儲位置的映射。它是文檔檢索系統中最常用的數據結構。
    • ? 正排索引 也叫attribute索引或者profile索引,是存儲doc某特定字段(正排字段)對應值的索引,用來進行過濾、統計、排序或者算分使用。正排索引中“正”指的是從doc-> fieldInfo的過程。
    • ? 索引內容類型 文本索引、空間索引 、向量索引、數值索引
  • ? 排序方法 匹配召回的結果集,通過特定的排序規則呈現。這里的排序規則,可以是單一維度的排序(如按價格、銷量、發布時間);人工設置的權重分;相關性得分;特定場景的模型打分等。
基于這三個基本概念,搜索動作就可以簡化地理解為“利用搜索詞的分詞結果,通過倒排索引匹配相應的文檔,并依據特定排序方法有序透出”的過程。 搜索引擎僅提供搜索的基礎能力,現實環境下的搜索場景當然要復雜的多, 一款地圖搜索和一款商品搜索所面臨的挑戰大相徑庭。作為原材料的搜索引擎,該打造成何種形狀,就看面對問題如何去設計模具了。 以閑魚為例, 搜索系統的整體架構如下:
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
閑魚搜索系統架構圖

在線服務

上述架構圖中的步驟1 ~ 8為一次搜索請求的完整執行流程 1)請求接入模塊 -> 應用層 處理客戶端或h5請求,請求接入模塊的主要工作:參數校驗負載均衡、安全攔截。大部分的非法請求在這一層被攔截,避免進入系統核心模塊后,導致不可預期的結果。應用層承載面向用戶的業務邏輯:實際處理用戶的業務請求,進行安全合規檢測,同時并行請求投放的各類資源位。 2)應用層 -> 排序接入層 排序接入層是連接應用層與底層引擎的紐帶,也是閑魚搜索系統的最核心模塊。他負責解析應用層的搜索請求,并對其進行合適流程編排:意圖預測->請求拼串->搜索引擎召回->精排模型打分->重排規則->外部混排。 3)排序接入層 -> 意圖預測模塊 負責分詞并預測搜索請求的實際意圖,包括錯詞改寫(例:平果->蘋果)、同義詞的合并(例:pingguo->蘋果),類目預測(例:“蘋果”出手機,還是出水果,它們各自的權重又是多少?)。 4)排序接入層 -> 搜索引擎 利用意圖預測得到的信息,合并應用層參數,拼裝出合法的搜索引擎請求,在搜索引擎內部歷經“海選”、“粗排” 、”精排” 三個階段,得到符合召回條件的商品集。 5)排序接入層 -> 精排模型打分 由于RT的限制,搜索引擎內部無法完成對海量商品復雜度較高的打分計算。這一步的工作,將引擎召回的商品集送入更精準的打分系統進行算分。為什么不把打分服務放在引擎內部?技術上是可行的,但由于打分服務變更頻率頻繁,而引擎相對穩定,處于系統迭代穩定性的考慮,獨立拆分精排打分服務是更好的選擇。 6)排序接入層 -> 混排模塊 部分業務場景下,合作方有合并混排的訴求。獨立拆分混排服務,隔離開發環境,讓不熟悉主搜的外部開發同學在獨立混排模塊內做開發,即使服務異常,也不至于影響閑魚本身的搜索能力。 7)排序接入層 -> 應用層 排序完成的商品列表,在應用層補充實時信息,如各類標簽,促銷信息等。同時,將商品搜索結果與廣告等各類投放組裝層最終的搜索結果頁。 8) 應用層 -> 接入層 -> 客戶端 將最終的搜索結果頁返回到客戶端或h5頁面進行渲染。

離線模塊

與在線服務對應, 搜索系統的離線模塊負責數據的dump,清洗,索引構建。 搜索引擎離線模塊
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
全量索引(Fullindex) :數據源來自多表join后的全量業務數據,包含所有商品信息,由buildSerive構建好索引后提供給Ha3使用,系統內僅有一份全量索引。 批次增量索引 (IncIndex) :根據周期內(通常30分鐘到1小時)數據產出方發送的增量消息(如:商品修改信息),在BuildService上構建成索引段,定期發送給Ha3加載,引擎存在多段批次增量。 實時索引(RtIndex): 將數據產出方實時生產的數據經中轉Topic發送至Ha3,由Ha3引擎內的BS lib構建出實時索引加載使用,時效性為實時。在新的批次增量索引加載后,Ha3對實時索引作清理。

穩定性

搜索承載閑魚導購線的核心流量,因此對系統的穩定性和業務的高可用有極高的要求。閑魚搜索系統,分別在中心機房(張北)和單元機房(南通)進行了異地多機房部署,確保當單一機房故障時,流量可轉發至正常機房服務。 應用層異地多活
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
引擎層異地多活
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程

系統

核心鏈路以外,搜索業務的高效運作也離不開一系列系統。 投放系統 —— 資源位與配置的投放
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
評測系統 —— 算法標注、效果評測
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
Debug平臺 —— 可視化的在線debug工具,負責線上請求回放、輿情排查等
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程

然后,優化它:閑魚搜索系統時效性優化

差異化場景

上一章節提到的搜索系統架構適用于大部分電商平臺,但閑魚搜索場景與常規電商平臺之間,又存在著顯著差異。
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
其中,閑魚商品單庫存無明顯冷熱差異變更頻繁的特性, 對全鏈路的實時處理能力都提出較高的要求。試想一下,熱門的商品被買下架后,并沒有及時同步引擎。對買家、賣家和平臺來說都是一種困擾與損失。
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
閑魚搜索經年累月的業務迭代,累積了相當量級的實時增量。最嚴重的時期,引擎的增量延時一度達到8小時之久,對用戶體驗、成交效率形成了巨大沖擊。因此過去的一段時間,我們開啟了搜索時效優化的專項。
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程

Searcher擴列

排查鏈路實時處理能力的瓶頸,如上文離線模塊中對實時增量的描述(數據產出方實時生產的數據經中轉Topic實時發送至Ha3,由Ha3引擎內的BS_lib構建出實時索引加載使用), 在實時增量到達索引所在searcher列之前都未出現延時,因此瓶頸位于在線searcher的BS_lib的消費能力, 最直接的方式是提升searcher的處理能力。因此,我們將searcher的列數從16列擴大至24列,提升了50%的實時增量處理能力,增量延時緩解。

引擎架構治理

我們重新思考了閑魚主搜引擎的架構與定位 。在之前的架構中,倒排、正排、詳情字段部署在同個引擎(Ha3引擎支持這種能力)。倒排、正排用作查詢索引,詳情字段補充商品詳細信息,并對外提供信息補全服務。但查詢的請求量是極其不對等的, 詳情字段的qps為索引字段的5.3倍。倒排與正排字段的數量遠大于詳情字段, 因此查詢請求的機器要求是小CPU, 大內存,詳情請求的機器則是大CPU,小內存。兩類字段部署在同一引擎, 各自的資源短板被放大。同時,各字段實時增量是累加的。因此,我們拆分了查詢引擎詳情引擎緩解增量壓力的同時,機器資源消耗也有所降低。
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程

增量分級

做了以上兩個優化后, 增量延遲有所緩解,但整體的增量量級并沒有下降多少。因此在離線鏈路中,我們開發了增量Profile插件,用來統計字段修改的頻率。
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
其中兩個字段合計占到修改量的37%(總400+字段), 經排查,兩個字段并不需要秒級的實時性。引擎的離線鏈路中,雖然設定了批次增量與實時增量,但事實上所有開啟的增量都會走實時增量通道,擠占優先級更高的增量的吞吐量。因此,進入引擎的增量務必根據業務訴求再做一次分級。由此,我們在buildService上開發了增量分級插件,提供增量分級處理的能力, 對于準實時性要求的增量僅做批次增量(1小時進引擎),不擠占核心實時增量的通道,保障商品核心特征的實時性。
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程

輔表寫擴散問題

優化增量量級的另一個重要關注點就是輔表寫擴散問題。商品以item_id為主鍵分列部署,離線階段,當輔表有驅動增量時,跟主表join后增量翻倍增長。例:商品上掛載用戶在線狀態的特征,當用戶狀態變化時,該用戶的所有商品都會發出實時增量消息。量級將遠大于用戶在線狀態的實際消息量級。解決方式是將這一類字段,單獨改造成在線輔表, 通過在線join的方式查詢。
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程
經過以上系列的優化后,我們最終把引擎延遲抹平,達到真正實時化搜索的定義( 基本無延遲, 紅框部分為全量后追增量階段, 采用逐行Rolling模式, 切換中機器不服務,對用戶體驗無感知)。
閑魚怎么搜索用戶名找人?閑魚搜索賬號找人的方法流程

最后

電商平臺的搜索是一項系統性工程, 經過多年發展,已沉淀出一套通用性的框架。里面不僅包含對搜索引擎的理解,也體現服務端架構設計的可伸縮、平行擴展等概念。但僅有框架的認知還不足以支撐快節奏的互聯網業務發展。在通用框架的基礎上,深刻理解搜索業務,關注穩定性、研發效能,找到應用場景的痛點,有針對性的做出架構調整,才能構建出真正助力業務發展的搜索系統。

聲明:本文由網站用戶香香發表,超夢電商平臺僅提供信息存儲服務,版權歸原作者所有。若發現本站文章存在版權問題,如發現文章、圖片等侵權行為,請聯系我們刪除。

(0)
上一篇 2023年3月27日 18:01:02
下一篇 2023年3月27日 18:02:27

相關推薦

發表回復

您的電子郵箱地址不會被公開。 必填項已用*標注

主站蜘蛛池模板: 亚洲成人午夜电影| 又大又紧又粉嫩18p少妇| 67194线路1(点击进入)| 好硬好爽好湿好深视频| 中文字幕永久免费| 日本边添边摸边做边爱的视频| 亚洲国产成人精品无码区在线观看| 猫咪免费观看人成网站在线| 午夜国产在线观看| 色之综合天天综合色天天棕色| 国产成人精品一区二三区| 18禁免费无码无遮挡不卡网站 | 色偷偷888欧美精品久久久| 国产在线视频一区二区三区| 五月天婷婷精品视频| 国产精品国产色综合色| 97久久天天综合色天天综合色hd| 天堂亚洲国产日韩在线看| 一级做a爰片性色毛片黄书| 成年女人免费播放影院| 久久久久久久99精品免费| 日本爽爽爽爽爽爽在线观看免| 久草视频在线网| 最近中文字幕在线中文视频 | 菠萝视频在线完整版| 国产又色又爽在线观看| 麻豆国产VA免费精品高清在线| 国产日本韩国不卡在线视频| 亚洲av无码专区在线播放| 欧美日韩中文字幕在线| 亚洲欧美日韩综合精品网| 泳衣男漫画臀篇佳门サエコcc| 免费无码黄动漫在线观看 | 污视频网站在线观看| 亚洲黄色免费网站| 男人j进女人p免费动态图| 伊人色综合久久天天人守人婷| 百合潮湿的欲望| 作者不详不要…用力呢| 狠狠色婷婷久久一区二区三区| 伊人色综合久久天天人手人婷|