分布式搜尋演算法

2021-06-20 09:25:13 字數 1269 閱讀 1118

對於搜尋引擎來說,索引存放在成千上萬臺機器上,如何進行分布式搜尋呢?

假設搜尋結果是以分頁的方式顯示,以

pagenumber

代表當前頁,從1

開始,以

pagesize

代表頁面大小

,預設為

10,以n代表

搜尋伺服器數量

。最簡單的

分布式搜尋演算法

為:有一台合併伺服器負責接受使用者的搜尋請求,然後分別向

n臺機器獲取前

pagenumber*pagesize

條結果,得到的結果數為

n*pagenumber*pagesize

,然後把這些資料重新進行排序,根據所要顯示的頁面

pagenumber

,獲取從

(pagenumber - 1) * pagesize + 1

開始的pagesize

條結果返回給使用者。

這個演算法很簡單,但有一些問題:

問題一:每次翻頁都要向每台

搜尋伺服器搜尋一遍

通常情況下,使用者在搜尋內容時都是順序翻頁的,即從第一頁往下順序翻,這個演算法沒有設計快取來減輕搜尋伺服器的壓力。

問題二:越往後翻頁,

搜尋伺服器的搜尋壓力越大

如果我們是查第

100頁,即第

991-1000

條記錄,那麼這個演算法需要從

n臺搜尋伺服器分別獲取

1000

條記錄才能完成,對於每台

搜尋伺服器

的搜尋壓力很大。

問題三:越往後翻頁,

合併伺服器的排序壓力越大

大型搜尋引擎往往是由成千上萬臺機器組成的

分布式搜尋集群

,如果按這個演算法來進行翻頁,假設n為

1000

,查詢第

100頁時,

合併伺服器

得到的結果數為

n*pagenumber*pagesize

= 1000 * 100 * 10 = 1000000

,要對這

100萬條結果進行排序,對

合併伺服器

來說壓力很大。對系統的

可伸縮性

是一種極大的破壞。

分布式搜尋elasticsearch配置檔案詳解

elasticsearch的config資料夾裡面有兩個配置檔案 elasticsearch.yml和logging.yml,第乙個是es的基本配置檔案,第二個是日誌配置檔案。elasticsearch.yml檔案中可以配置的如下 cluster.name elasticsearch 配置es的集群...

分布式搜尋方案選型

solr官網 我在學校專案實踐時使用過solandra,它是乙個基於solr和nosql資料庫cassandra的分布式搜尋引擎。cassandra是由facebook開源的nosql數 據庫,facebook的信箱搜尋就是基於它實現的,它是基於列結構的,不同與關聯式資料庫。它的數學模型基於goog...

分布式搜尋elasticsearch幾個概念解析

cluster 代表乙個集群,集群中有多個節點,其中有乙個為主節點,這個主節點是可以通過選舉產生的,主從節點是對於集群內部來說的。es的乙個概念就是去中心化,字面上理解就是無中心節點,這是對於集群外部來說的,因為從外部來看es集群,在邏輯上是個整體,你與任何乙個節點的通訊和與整個es集群通訊是等價的...