一. 邏輯設計:文檔、類型、索引
- 總結下關係型數據庫和非關係型數據庫
Relational DB | ElasticSearch |
---|---|
數據庫(database) | 索引(index) |
表(table) | 類型types |
行rows | 文檔documents |
字段columns | 字段fields |
elastic search(集羣)中可以包含多個索引庫, 每個索引中可以包含多個類型表,每個類型下又包含多個文檔,每個文檔中又包含多個字段。
1.文檔
- ElasticSearch中面向文檔的,那麼意味着索引和搜索數據的最小單位是文檔。ElasticSearch中文檔有幾個重要的屬性:
- 自我包含,一篇文檔中包含字段和對應的值
- 不需要預先定義文檔結構,裏面塞的內容是靈活的,
- 文檔是無模式的,字段對應值的類型是不受限制類型的。
2.類型
- 類型是文檔的邏輯容器,就像關係型數據庫一樣,表格是行的容器。類型中對於字段的定義成爲映射。我麼需要提前定義好所需要的映射,約束好每個字段的類型。
3.索引
- 索引是映射類型的容器。ElasticSearch中的索引是非常大的文檔集合,索引存儲了映射類型和其他設置,然後存儲到各個分片上。
二. 物理設計: 節點、分片
- 一個集羣包含至少一個節點,節點內可以有多個索引。如果創建一個索引,那麼這個索引會有五個分片,每個分片又有一個副本,這樣一個索引就有了10個分片。
- 主分片和對應的複製分片都不會在同一個節點內,這樣有利於某個節點掛掉了,數據也不至於丟失。
三. 倒排索引
-
elasticsearch使用的是一種稱爲倒排索引的結構,採用Lucene倒排索作爲底層。根據屬性的值來查找記錄,這種結構適用於快速的全文搜索,一個索引由文檔中所有不重複的列表構成,對於每一個詞,都有一個包含它的文檔列表。
倒排列表(Posting List)記錄了詞條對應的文檔集合,由倒排索引項(Posting)組成。 -
簡單理解:會對每個文件分詞,建立的是分詞(Term)和文檔(Document)之間的映射關係,在倒排索引中,數據是面向詞(Term)而不是面向文檔的。如:
關鍵詞 倒排列表 django 文章1,文章2…(是一個列表) Python 文章2,文章3… scrapy 文章4,文章5… -
關鍵詞出現的次數和頻率對這個文檔也很重要
關鍵詞 倒排列表 python (文章1,<2,10>,2 Python (文章2,<5,10,30,45>,4 scrapy (文章4,<5>,1 -
es中的倒排索引數據存儲