天天看點

elasticsearch 一點點介紹,加強一下了解

作者:夢幻随風的網際網路筆記
elasticsearch 一點點介紹,加強一下了解

關系行資料庫和ElasticSearch客觀對比

ElasticSearch是面向文檔,關系行資料庫和ElasticSearch客觀對比!一切都是JSON!

Relational DB ElasticSearch
資料庫(database) 索引(indices)
表(tables) types <慢慢會被棄用!>
行(rows) documents
字段(columns) fields

elasticsearch(叢集)中可以包含多個索引(資料庫) ,

每個索引中可以包含多個類型(表) ,

每個類型下又包含多個文檔(行) ,

每個文檔中又包含多個字段(列)。

實體設計:

elasticsearch在背景把每個索引劃分成多個分片,每分分片可以在叢集中的不同伺服器間遷移

一個人就是一個叢集! ,即啟動的ElasticSearch服務,預設就是一個叢集,且預設叢集名為elasticsearch;

邏輯設計:

一個索引類型中,包含多個文檔,比如說文檔1,文檔2。

當我們索引一篇文檔時,可以通過這樣的順序找到它:

索引 => 類型 => 文檔ID ,通過這個組合我們就能索引到某個具體的文檔。

注意:ID不必是整數,實際上它是個字元串。

索引(“庫”)

索引是映射類型的容器, elasticsearch中的索引是一個非常大的文檔集合。

索引存儲了映射類型的字段和其他設定。

然後它們被存儲到了各個分片上了。

一個叢集至少有一個節點,而一個節點就是一個elasricsearch程序,

節點可以有多個索引預設的,如果你建立索引,那麼索引将會有5個分片(primary shard ,又稱主分片) 構成的,

每一個主分片會有一個副本(replica shard,又稱複制分片);

elasticsearch 一點點介紹,加強一下了解

類型(“表”)

類型是文檔的邏輯容器,就像關系型資料庫一樣,表格是行的容器。

類型中對于字段的定義稱為映射,比如name映射為字元串類型。我們說文檔是無模式的,它們不需要擁有映射中所定義的所有字段,比如新增一個字段,那麼elasticsearch是怎麼做的呢?

elasticsearch會自動地将新字段加入映射,但是這個字段的不确定它是什麼類型,elasticsearch就開始猜,如果這個值是18,那麼elasticsearch會認為它是整形。

但是elasticsearch也可能猜不對,是以最安全的方式就是提前定義好所需要的映射,這點跟關系型資料庫殊途同歸了,先定義好字段,然後再使用

文檔(”行“)

之前說elasticsearch是面向文檔的,那麼就意味着索引和搜尋資料的最小機關是文檔,

elasticsearch中,文檔有幾個重要屬性:

  • 自我包含,一篇文檔同時包含字段和對應的值,也就是同時包含key:value !
  • 可以是層次型的,一個文檔中包含自文檔,複雜的邏輯實體就是這麼來的! {就是一個json對象 ! fastjson進行自動轉換 !}
  • 靈活的結構,文檔不依賴預先定義的模式,我們知道關系型資料庫中,要提前定義字段才能使用,在elasticsearch中,對于字段是非常靈活的,有時候,我們可以忽略該字段,或者動态的添加一個新的字段。

反向索引(Lucene索引底層)

簡單說就是 按(文章關鍵字,對應的文檔<0個或多個>)形式建立索引,根據關鍵字就可直接查詢對應的文檔(含關鍵字的),無需查詢每一個文檔

反向索引是差別于正排索引的概念:

  • 正排索引:是以文檔對象的唯一 ID 作為索引,以文檔内容作為記錄。
  • 反向索引:Inverted index,指的是将文檔内容中的單詞作為索引,将包含該詞的文檔 ID 作為記錄。
elasticsearch 一點點介紹,加強一下了解

如果需要在文檔中查詢 蘇州街桔子 ,可以通過分詞後:

蘇州街 查到 1、2,

通過 桔子 查到 2,

然後再進行 取交取并等操作 得到最終結果。

繼續閱讀