詳談京東的商品搜索系統架構設計

京東商品搜索引擎是搜索推薦部自主研發的商品搜索引擎,主要功能是爲海量京東用戶提供精準、快速的購物體驗。雖然只有短短几年的時間,咱們的搜索引擎已經通過了屢次618店慶和雙11的考驗,目前已經可以與人們平常使用的如谷歌、百度等全文搜索引擎相比,咱們的產品與其有相通之處,好比涵蓋億級別商品的海量數據、支持短時超高併發查詢、又有本身的業務特色:算法

 

  1. 海量的數據,億級別的商品量;
  2. 高併發查詢,日PV過億;
  3. 請求須要快速響應。

 

搜索已經成爲咱們平常不可或缺的應用,很難想象沒有了Google、百度等搜索引擎,互聯網會變成什麼樣。京東站內商品搜索對京東,就如同搜索引擎對互聯網的關係。數據庫

他們的共同之處:緩存

  1. 海量的數據,億級別的商品量;
  2. 高併發查詢,日PV過億;
  3. 請求須要快速響應。

這些共同點使商品搜索使用了與大搜索相似的技術架構,將系統分爲:性能優化

  1. 離線信息處理系統;
  2. 索引系統;
  3. 搜索服務系;
  4. 反饋和排序系統。

同時,商品搜索具備商業屬性,與大搜索有一些不一樣之處:服務器

  1. 商品數據已經結構化,但散佈在商品、庫存、價格、促銷、倉儲等多個系統;
  2. 召回率要求高,保證每個正常的商品均可以被搜索到;
  3. 爲保證用戶體驗,商品信息變動(好比價格、庫存的變化)實時性要求高,致使更新量大,天天的更新量爲千萬級別;
  4. 較強的個性化需求,因爲是一個相對垂直的搜索領域,須要知足用戶的個性化搜索意圖,好比用戶搜索「小說」有的用戶但願找言情小說有的人須要找武俠小說有的人但願找到勵志小說。

另外不一樣的人消費能力、性別、對配送時間的忍耐程度、對促銷的偏好程度以及對屬性好比「風格」、「材質」等偏好不一樣。以上這些須要有比較完善的用戶畫像系統來提供支持。架構

整體架構圖

  • 搜索服務集羣:由不少個merger節點組成的集羣。接收到查詢query後,將請求經過qp觸發有策略地下發到在線檢索服務集羣和其餘服務集羣,並對各個服務的返回結果進行合併排序,而後調用detail server包裝結果,最終返回給用戶。
  • query processor server:搜索query意圖識別服務。
  • 在線檢索服務集羣:由不少個searcher節點組成,每一個searcher列對應一個小分片索引(包含全量數據和實時增量數據)。
  • detail server:搜索結果展現服務。
  • 索引生產端:包含全量和增量數據生產,爲在線檢索服務集羣提供全量索引和實時索引數據。
  • 離線信息處理系統: 因爲商品數據分佈在不一樣的異構數據庫當中有KV有關係型數據庫,須要將這些數據抽取到京東搜索數據平臺中,這分爲全量抽取和實時抽取。對於全量索引,因爲商品數據散佈於多個系統的庫表中,爲了便於索引處理,對多個系統的數據在商品維度進行合併,生成商品寬表。而後在數據平臺上,使用MapReduce對商品數據進行清洗,以後進行離線業務邏輯處理,最終生成一份全量待索引數據。對於實時索引,爲了保證數據的實時性,實時調用各商品信息接口獲取實時數據,將數據合併後採用與全量索引相似的方法處理數據,生成增量待索引數據。
  • 索引系統:此係統是搜索技術的核心,在進入這個系統以前,搜索信息仍然是以商品維度進行存儲的。索引系統負責生成一種以關鍵字維度進行存儲的信息,通常稱之爲倒排索引。此係統對於全量和增量的處理是一致的,惟一的區別在於待處理數據量的差別。通常狀況下,全量數據索引因爲數據量龐大,採用Hadoop進行;實時數據量小,採用單機進行索引生產。

搜索服務系統

搜索服務系統是搜索真正接受用戶請求並響應的系統。這個系統最初只有1列searcher組成在線檢索服務。因爲用戶體驗的須要,首先增長Query Processor服務,負責查詢意圖分析,提高搜索的準確性。隨着訪問量的增加,接着增長緩存模塊,提高請求處理性能。接着隨着數據量(商品量)的增加,將包裝服務從檢索服務中獨立出去,成爲detail server服務。數據量的進一步增加,對數據進行相似數據庫分庫分表的分片操做。這時候,在線檢索服務由多個分片的searcher列組成。天然而然,須要一個merger服務,將多個分片的結果進行合併。至此,搜索基礎服務系統完備。併發

以後,不管是搜索量的增加或者數據量的增加,均可以經過擴容來知足。對於61八、1111之類的搜索量增加,可經過增長每一個searcher列服務器的數量來知足。而對於商品數據的不斷增長,只須要對數據作更多的分片,相應地增長searcher列來知足。機器學習

搜索服務系統內部的處理流程以下:高併發

在這個流程中,緩存模塊和拉取結果模塊很是穩定。而排序模塊和在線業務邏輯處理模塊常常須要改動。架構須要穩定,高效和通用。排序業務特色是實驗模型多,開發迭代速度快,講求效果。爲了解決這一衝突,須要將排序業務與架構分離,以動態連接庫的方式集成到搜索總體架構中,具體包括文本策略和其餘策略兩個維度的相關性,文本策略相關性集成在searcher當中;其餘策略相關性(包括反饋,個性化和業務調權等等)集成在merger當中。實現架構與排序業務各司其職,互不影響干擾。oop

 

反饋和排序系統

反饋系統主要包含用戶行爲數據的實時收集、加工,並將數據存儲到數據集市當中,並對這些數據進行特徵提取,排序最主要考覈的線上指標是UV價值和轉化率,因此還會利用這些數據根據優化目標構建起標註數據。而後基於機器學習的排序系統會針對特徵構建出模型。京東排序模型是天天更新的訓練以前大概半年的數據。京東搜索在基於模型的排序基礎之上,上層還會有一層規則引擎,好比保障店鋪和品牌的多樣性,以及京東戰略扶持的品牌等都經過業務引擎來實現。通常基於機器學習的排序模型須要較長期的投入可是模型更加健壯不容易被做弊手段找到漏洞,而且可讓轉化率和UV價值可持續的提高。 規則引擎主要是爲了快速反應市場。

針對雙11的性能優化

1. 故障秒級切換

今年搜索集羣作到了三機房部署,任何一個機房出現斷網、斷電等問題能夠秒級將流量切換到其它機房。而且搜索的部分應用部署到了彈性雲上,能夠進行動態擴容。

2.大促期間索引數據實時更新

每一年大促因爲商品內容等信息更改頻繁,涉及千萬級的索引寫操做,今年針對索引結構進行了調整完全消滅掉了索引更新存在的一切鎖機制,商品新增和修改操做變爲鏈式更新。使大促期間商品的索引更新達到了妙極。

3.大促期間的個性化搜索不降級

往年大促期間因爲流量在平時5倍以上,高峯流量會在平時的7倍,爲了保障系統穩定,個性化搜索都進行了降級處理。今年針對搜索的緩存進行了針對性的優化,實現了三級緩存結構。從底向上分別是針對term的緩存,相關性計算緩存和翻頁緩存。最上層的翻頁緩存不少時候會被用戶的個性化請求擊穿,可是底層的相關性緩存和term緩存的結果能夠起到做用,這樣不至於使CPU負載太高。 

京東在電商搜索方面產品和技術的創新

一、個性化搜索

個性化以前的搜索對於同一個查詢,不一樣用戶看到的結果是徹底相同的。這可能並不符合全部用戶的需求。在商品搜索中,這個問題尤其特出。由於商品搜索的用戶可能特別青睞某些品牌、價格、店鋪的商品,爲了減小用戶的篩選成本,須要對搜索結果按照用戶進行個性化展現。

個性化的第一步是對用戶和商品分別建模,第二步是將模型服務化。有了這兩步以後,在用戶進行查詢時,merger同時調用用戶模型服務和在線檢索服務,用戶模型服務返回用戶維度特徵,在線檢索服務返回商品信息,排序模塊運用這兩部分數據對結果進行重排序,最後給用戶返回個性化結果。

二、整合搜索

用戶在使用搜索時,其目的不只僅是查找商品,還可能查詢服務、活動等信息。爲了知足這一類需求,首先在Query Processor中增長對應意圖的識別。第二步是將服務、活動等一系列垂直搜索整合並服務化。一旦QP識別出這類查詢意圖,就條用整合服務,將對應的結果返回給用戶。

三、情感搜索

情感搜索在於儘量知足更多的搜索意圖,這須要在後臺構建一個強大的知識庫體系。好比從海里評論中挖掘有意義的標籤「成像效果好的相機」、「聚攏效果好的胸罩」、「適合送丈母孃」等,將這些信息一同構建到索引中去好比搜索「適合送基友的禮物」結合搜索意圖分析相關的結果能夠搜索出來。另外也能夠從外部網站抓取有價值信息輔助構建知識庫體系。

四、圖像檢索

不少時候用戶並不知道如何描述一個商品。經過搜索意圖分析、情感分析能夠儘量挖掘搜索意圖,不少時候用戶根本沒法描述,好比在超市看到一個進口食品或者一件時尚的衣服,能夠經過拍照檢索迅速在網上找到並比較價格,另外看到同事穿着一件比較喜歡的衣服也能夠經過拍照檢索來找到。目前京東正在開始展開這方面的開發。離線方面主要經過CNN算法,對圖片進行主題提取、提取類似特徵、相同特徵提取。引擎端主要是和搜索引擎相似的技術。圖像搜索將來將能夠開闢一個新的電商購物入口。京東目前正在研發新的圖像檢索引擎。

相關文章
相關標籤/搜索