ElasticSearch - (2) 數據庫結構

一. 邏輯設計:文檔、類型、索引

  • 總結下關係型數據庫和非關係型數據庫
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中的倒排索引數據存儲
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章