這段時間項目上在研究ElasticSearch,所以記錄一下學習心得,如有不對或者有需要補充的地方,麻煩各位小伙伴積極指出!
ES核心術語
index索引? ? ? ? ?數據庫的表
document? ? ? ? ?數據庫的表中對應的數據行
field? ? ? ? ? ? ? ? ? 數據庫中字段列
ES的優勢
mapping映射? ? ? ? ? ? ? 對應的表結構定義
近實時NRT? ? ? ? ? ? ? ? ? Near Real Time? ?好比在github上建了一個倉庫,基本耗時1S,最快可以1S內可以被搜索到
節點node? ? ? ? ? ? ? ? ? ? 可以使用分布式集群(相當于一臺服務器就是一個節點,獨立也可以使用)
shard replica? ? ? ? ? ? ? ?數據分片與備份(分片【shard】:把索引庫拆分為多份,分布在不同的節點上,比如有2個節點,這2個節點的所有數據可以組成一個完整的索引庫,分別存在這2個節點,目的是水平擴展,可以有效的提高吞吐量。備份【replica】每個節點的備份)在每個分片上會有一個ES的進程,會有一定的計算能力,在分片存在的同時,ES會對相應的分片進行備份,假如此時還是2個節點,當其中一個節點掛了以后,會立即把此節點備份的數據掛載到另外一個節點上。分片【shard】也可以被稱為primary shard(主分片),備份【replica】也可以被稱為replica?shard (備份),如果后期數據達到6T的數據量的話,需要配置6個shard分片
ES處理數據的一個方式? ? ? ?倒排索引
比如我下面的例子:? 以下數據其實就是對應數據中的一張表的3行數據,右圖是ES中的排序方式
文檔ids表示單詞在表中存在的數據行(表示數據在左邊的第幾行)簡單來說就是根據key查找value這個屬于正排索引
id? ? ? ? ? ? ? ? ? ? ? name? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 單詞? ? ? ? ? ? 文檔ids? ? ? ? ? ? ?詞頻TF;位置POS
1? ? ? ? ? ? ? ? ? ? 肯德基真好吃? ? ? ? ? ? ? ? ? ? ? ? ?肯德基? ? ? ? ? 1,2,3? ? ? ? ? ?1:1:<1>,2:1:<1>,3:1:<1>
2? ? ? ? ? ? ? ? ? ? 肯德基是快餐? ? ? ? ? ? ? ? ? ? ? ? ? 真? ? ? ? ? ? ? ? ? ? ?1? ? ? ? ? ? ? ? ?1:1:<3>
3? ? ? ? ? ? ? ? ? ? 肯德基好吃的不行? ? ? ? ? ? ? ? ? ?好吃? ? ? ? ? ? ? ? ? 3? ? ? ? ? ? ? ? ?3:1:<3>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 是? ? ? ? ? ? ? ? ? ? ? 2? ? ? ? ? ? ? ? ?2:1:<3>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?的? ? ? ? ? ? ? ? ? ? ? 3? ? ? ? ? ? ? ? ?3:1:<5>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?快餐? ? ? ? ? ? ? ? ? ?2? ? ? ? ? ? ? ? ?2:1:<4>
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不行? ? ? ? ? ? ? ? ? ?3? ? ? ? ? ? ? ? ?3:1:<6>
以下是根據右上圖的文檔ids,我們可以得出以下數據:倒排索引是根據value來查找對應的key,
我們以1:1:<1>為例,第一個1是表示單詞所在的行Id,第二個1表示在單詞所在行Id出現的次數,<1>表示單詞所在行Id的位置,索引是從0開始的。出現的頻率越高,越容易被用戶搜索的到。