分布式搜尋引擎

2021-10-01 23:33:23 字數 2158 閱讀 6157

es是基於lucene實現的分布式搜尋引擎——elasticsearch。核心思想是在多台機器上啟動多個es程序例項,組成了乙個es集群。

es中儲存資料的基本單位是索引,比如說你現在要在es中儲存一些訂單資料,你就應該在es中建立乙個索引,order_idx,所有的訂單資料就都寫到這個索引裡面去,乙個索引差不多就是相當於是mysql裡的一張表。

type:沒法跟mysql裡去對比,乙個index裡可以有多個type。好比說,有乙個index,是訂單index,裡面專門是放訂單資料。就好比說你在mysql中建表,有些訂單是實物商品的訂單,就好比說一件衣服,一雙鞋子;有些訂單是虛擬商品的訂單,就好比說遊戲卡,話費充值。就兩種訂單大部分欄位是一樣的,但是少部分字段可能有略微的一些差別。所以就會在訂單index裡,建兩個type,乙個是實物商品訂單type,乙個是虛擬商品訂單type。相當於每個type代表是具體的乙個mysql中的表。

document:實際上你往index裡的乙個type裡面寫的一條資料,叫做一條document,一條document就代表了mysql中某個表裡的一行資料

field:每個document有多個field,每個field就代表了這個document中的乙個欄位的值

es是如何實現分布式的:

客戶端插入資料。選擇乙個機器作為(協調節點),通過hash協調到對應的primary shard中。primary再同步到replica。

寫入變化:

1、寫入primary時,先寫入buff記憶體中。同時寫乙個translog日誌檔案

2、buff快慢了。或者一定時間(一般為1秒),會通過refresh來重新整理到segmentfile中。不過首先會寫入到oscache裡。進入到oscache中時就可以被客戶端搜尋到了。。

3、資料進入到oscache中後。buff就會清空。不過translog裡的資料在不斷的增大。大到一定的閾值。就會觸發commit操作。

4、commit發生後,會把buffer裡現有的資料refresh到oscache中。清空buffer

5、將乙個commit point寫入磁碟檔案中,標識了這個commitpoint對應的所有segmentfile

6、強行把oscache中的所有資料fsync到segment file中。

7、清空translog,再重啟乙個translog,commit完成。預設30分鐘自動執行一次,但是過大。也會觸發commit。我們可以通過手動flush來實現commit。會把所有的oscache刷到磁碟中

8、其實translog也是先寫的oscache,5秒後再寫入磁碟。因此。有可能會丟掉5秒所有的資料、也可以通過修改引數來保證每次資料都寫入。不過就效能降低。

刪除資料

1、有刪除請求。會建立乙個.del檔案中進行標識、把doc標識為deleted狀態。那麼搜尋的時候根據.del檔案就知道這個doc被刪除了

2、更新操作。就是先刪除再寫入

3、buffer每次refresh,都產生乙個segmetfile檔案。太多了之後。就進行merge,每次merge的時候就會把標識為deleted的doc給物理刪除掉。然後把乙個新的segmentfile寫入磁碟、這裡會有乙個commitpoint,標識所有新的segmentfile,然後開啟segmentfile供搜尋使用、同時刪除舊的segment

讀取資料

搜尋資料

es的調優主要就是讓一些熱詞、頻詞進入到記憶體中去。

1、擴大filesystemcache的容量

2、資料預熱:對一些熱詞。隔一段時間進行一次查詢。保持在記憶體中

3、冷熱分離:冷詞和熱詞分開

4、document模型:減少複雜查詢。

5、es分頁,scroll api來進行逐個分頁

ElasticSearch分布式搜尋引擎 高階查詢

本文承接自 elasticsearch分布式搜尋引擎簡介及其增刪改查那些事 elasticsearch分布式搜尋引擎 基本查詢 bool把各種其它查詢通過must 與 must not 非 should 或 的方式進行組合 get testindex511 search must not shoul...

分布式搜尋引擎介紹(一)

google就是典型的分布式搜尋引擎,它由上萬台計算機組成。下面主要講一下分布式搜尋引擎的核心問題以及主要的分布式搜尋引擎設計方法。分布式搜尋引擎的最主要的核心問題 1 分布的資訊獲取和計算,以及對此進行的資料統一 這裡面包括爬蟲或者相應的資料獲取機制的分布,對資訊進行加工的統一管理。2 資料處理後...

分布式搜尋引擎相關問題

lucene 如果你確實真的不連lucene都不知道是什麼?我覺得你確實不應該,lucene底層的原理是乙個東西,叫做倒排索引。太基礎了。lucen入門 倒排序 elasticsearch elasticsearch入門,初步至少知道es的一些基本概念,然後包括es的基本部署和基本的使用 面試官可能...