電商搜索引擎的架構(gòu)設(shè)計(jì)和性能優(yōu)化

2015-10-30 16:54:00 來(lái)源:oschina.net 作者:佚名 人氣: 次閱讀 164 條評(píng)論

眾所周知,標(biāo)準(zhǔn)的搜索引擎主要分成三個(gè)大的部分,第一步是爬蟲(chóng)系統(tǒng),第二步是數(shù)據(jù)分析,第三步才是檢索結(jié)果。因?yàn)殡娚趟阉饕话愕乃阉饕鎱^(qū)別很大,所以在架構(gòu)的設(shè)計(jì)上...

電商搜索引擎的特點(diǎn)

眾所周知,標(biāo)準(zhǔn)的搜索引擎主要分成三個(gè)大的部分,第一步是爬蟲(chóng)系統(tǒng),第二步是數(shù)據(jù)分析,第三步才是檢索結(jié)果。

首先,電商的搜索引擎并沒(méi)有爬蟲(chóng)系統(tǒng),因?yàn)樗械臄?shù)據(jù)都是結(jié)構(gòu)化的,一般都是微軟的數(shù)據(jù)庫(kù)或者 Oracle 的數(shù)據(jù)庫(kù),所以不用像百度一樣用「爬蟲(chóng)」去不斷去別的網(wǎng)站找內(nèi)容,當(dāng)然,電商其實(shí)也有自己的「爬蟲(chóng)」系統(tǒng),一般都是抓取友商的價(jià)格,再對(duì)自己進(jìn)行調(diào)整。

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

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

電商搜索引擎另一個(gè)特點(diǎn)就是不能丟品,比如我們?cè)谔詫殹⑻熵堥_(kāi)了個(gè)店鋪,然后好不容易搞了一次活動(dòng),但是卻搜不到了,這是無(wú)法忍受的。除此之外,電商搜索引擎與推薦系統(tǒng)和廣告系統(tǒng)是相互融合的,因?yàn)樗阉匾鎸?duì)流量的貢獻(xiàn)是最大的,所以大家都希望把廣告系統(tǒng)能跟其融合。當(dāng)然,還有一點(diǎn)非常重要,就是要保證絕對(duì)的高可用,而且不能宕機(jī)。

電商搜索引擎的架構(gòu)

因?yàn)殡娚趟阉饕话愕乃阉饕鎱^(qū)別很大,所以在架構(gòu)的設(shè)計(jì)上也獨(dú)具特色。

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

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

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

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

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

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

電商搜索引擎標(biāo)配模塊

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

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

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

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

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

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

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

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

您可能感興趣的文章

    無(wú)相關(guān)信息

相關(guān)文章