電商搜索引擎的架構設計和性能優(yōu)化

2015-10-30 16:54:00 來源:oschina.net 作者:佚名 人氣: 次閱讀 164 條評論

眾所周知,標準的搜索引擎主要分成三個大的部分,第一步是爬蟲系統(tǒng),第二步是數(shù)據(jù)分析,第三步才是檢索結果。因為電商搜索引跟一般的搜索引擎區(qū)別很大,所以在架構的設計上...

電商搜索引擎的特點

眾所周知,標準的搜索引擎主要分成三個大的部分,第一步是爬蟲系統(tǒng),第二步是數(shù)據(jù)分析,第三步才是檢索結果。

首先,電商的搜索引擎并沒有爬蟲系統(tǒng),因為所有的數(shù)據(jù)都是結構化的,一般都是微軟的數(shù)據(jù)庫或者 Oracle 的數(shù)據(jù)庫,所以不用像百度一樣用「爬蟲」去不斷去別的網(wǎng)站找內容,當然,電商其實也有自己的「爬蟲」系統(tǒng),一般都是抓取友商的價格,再對自己進行調整。

第二點,就是電商搜索引擎的過濾功能其實比搜索功能要常用。甚至大于搜索本身。什么是過濾功能?一般我們網(wǎng)站買東西的時候,搜了一個關健詞,比如尿不濕,然后所有相關品牌或者其他分類的選擇就會呈現(xiàn)在我們面前。對百度而言,搜什么詞就是什么詞,如果是新聞的話,可能在時間上會有一個過濾的選項。

第三點,電商搜索引擎支持各種維度的排序,包括支持好評、銷量、評論、價格等屬性的排序。而且對數(shù)據(jù)的實時性的要求非常高。對一般的搜索引擎,只有非常重要的網(wǎng)站,比如一些重量級的門戶網(wǎng)站,百度的收錄是非常快的,但是對那些流量很小的網(wǎng)站,可能一個月才會爬一次。電商搜索對數(shù)據(jù)的實時性要求主要體現(xiàn)在價格和庫存兩個方面。

電商搜索引擎另一個特點就是不能丟品,比如我們在淘寶、天貓開了個店鋪,然后好不容易搞了一次活動,但是卻搜不到了,這是無法忍受的。除此之外,電商搜索引擎與推薦系統(tǒng)和廣告系統(tǒng)是相互融合的,因為搜素引擎對流量的貢獻是最大的,所以大家都希望把廣告系統(tǒng)能跟其融合。當然,還有一點非常重要,就是要保證絕對的高可用,而且不能宕機。

電商搜索引擎的架構

因為電商搜索引跟一般的搜索引擎區(qū)別很大,所以在架構的設計上也獨具特色。

首先,搜索引擎的實現(xiàn)方式有很多種,有谷歌、百度、搜狗這種非常大的公司,也有京東、淘寶、當當這樣的電商搜索引擎,很多中小型的電商可能更喜歡用一個開源的搜索引擎。所以總的來說,主要包括以下這幾種方式:

電商搜索引擎 搜索引擎優(yōu)化 電商網(wǎng)站優(yōu)化 性能優(yōu)化 網(wǎng)站結構優(yōu)化

第一種是「Lucene+自己封裝」,只用來做檢索,然后封裝,后面所有的 ES,這兩個是完整的解決方案,而且包括索引所有的東西,只需要部署好業(yè)務邏輯,然后查找結果就可以了。

第二種就是 Solr,這是一個高性能,采用 Java5 開發(fā),基于 Lucene 的全文搜索服務器。同時對其進行了擴展,提供了比 Lucene 更為豐富的查詢語言,同時實現(xiàn)了可配置、可擴展并對查詢性能進行了優(yōu)化,并且提供了一個完善的功能管理界面,是一款非常優(yōu)秀的全文搜索引擎。

第三種是 ElasticSearch,這是一個基于 Lucene 的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 開發(fā)的,并作為 Apache 許可條款下的開放源碼發(fā)布,目前使用的也非常多。

這里提一下,當當?shù)乃阉饕媸亲约簩崿F(xiàn)的,?,F(xiàn)在,新興的互聯(lián)網(wǎng)公司大部分都是使用第一種或者第二種,數(shù)據(jù)量比較大的一般采用第三種。

電商搜索引擎標配模塊

電商搜索引擎 搜索引擎優(yōu)化 電商網(wǎng)站優(yōu)化 性能優(yōu)化 網(wǎng)站結構優(yōu)化

接下來我想講一下,如果我們自己做一個搜索引擎的話需要實現(xiàn)哪些功能(上圖是電商搜索引擎的標準模塊),其實不止是電商搜索引擎,除了通搜的搜索引擎,其他的搜索引擎也是使用這樣的標配。

電商搜索引擎 搜索引擎優(yōu)化 電商網(wǎng)站優(yōu)化 性能優(yōu)化 網(wǎng)站結構優(yōu)化

對檢索模塊而言,首先是對用戶的意圖進行分析,根據(jù)用戶的搜索詞來進行純算法的實現(xiàn)。比如用戶的搜索詞是「黑包包」,其實用戶的本意就是買一個黑色的包,但是這個「包」可以跟別的詞組合在一起,甚至在搜索結果中會出現(xiàn)「包子」。所以,這就需要 query 分析系統(tǒng)來做,告訴檢索系統(tǒng),你需要主要在服裝鞋帽中的分類去找,而不是生鮮食品類。

設計到技術層面,當當網(wǎng)使用的是 C++。如果構建一個性能好的系統(tǒng),一些老一點的公司,大家都是在使用 C++ 或者是 C 語言。不止是當當網(wǎng),其實很多公司都是使用的 C 或者 C++ 實現(xiàn)的搜索引擎。

數(shù)據(jù)更新模塊

電商搜索引擎 搜索引擎優(yōu)化 電商網(wǎng)站優(yōu)化 性能優(yōu)化 網(wǎng)站結構優(yōu)化

第二個模塊就是數(shù)據(jù)更新模塊,該模塊負責生成索引。而數(shù)據(jù)中心模塊主要做的事情,就是將原始的結構化數(shù)據(jù),變成一個可供檢索系統(tǒng)使用的搜索數(shù)據(jù)庫。當然,數(shù)據(jù)更新模塊和檢索模塊是分開還是合并呢?其實從本質上講,都是一堆代碼,完全可以寫在一個進程里。當然,也可以分開,通過網(wǎng)絡往外輸入,各自都有道理。第一種是簡單粗暴型的,如果是普通電商,像生鮮電商,數(shù)據(jù)量不大,實時性、季節(jié)性很強,就可以把兩個系統(tǒng)用一個進程來完成。但是如果到了百萬、千萬甚至上億級別的話,就不可能部在一臺機器上了。

    無相關信息