摘要:序列化被大多數編程語言所支持,并且已經成為領域的標準格式。通過索引對文檔的進行創建查詢修改和刪除等操作。請求的結構調整為不再使用請求使用這個存儲這個文檔,而是使用請求存儲文檔在這個命名空間下。
在安裝elasticsearch之后,我們就要開始進行操作實踐,那么在實踐之前,我們首先了解下elasticsearch的幾個概念
面向文檔相對關系型數據庫,是采用行和列的形式進行存儲數據,elasticsearch是面向文檔的,意味著它存儲整個對象或文檔。Elasticsearch 不僅存儲文檔,而且 索引 每個文檔的內容使之可以被檢索。在 Elasticsearch 中,你對文檔進行索引、檢索、排序和過濾--而不是對行列數據。這是一種完全不同的思考數據的方式,也是 Elasticsearch 能支持復雜全文檢索的原因。
Elasticsearch 使用 JavaScript Object Notation 或者?JSON?作為文檔的序列化格式。JSON 序列化被大多數編程語言所支持,并且已經成為 NoSQL 領域的標準格式。 它簡單、簡潔、易于閱讀。
一個集群就是由一個或多個節點組織在一起,它們共同持有你整個的數據,并一起提供索引和搜索功能。一個集群由一個唯一的名字標識,這個名字默認就是“elasticsearch”。這個名字是重要的,因為一個節點只能通過指定某個集群的名字,來加入這個集群。在產品環境中顯式地設定這個名字是一個好習慣,但是使用默認值來進行測試/開發也是不錯的。
節點(node)一個節點是你集群中的一個服務器,作為集群的一部分,它存儲你的數據,參與集群的索引和搜索功能。和集群類似,一個節點也是由一個名字來標識的,默認情況下,這個名字是一個隨機的漫威漫畫角色的名字,這個名字會在啟動的時候賦予節點。這個名字對于管理工作來說挺重要的,因為在這個管理過程中,你會去確定網絡中的哪些服務器對應于Elasticsearch集群中的哪些節點。
一個節點可以通過配置集群名稱的方式來加入一個指定的集群。默認情況下,每個節點都會被安排加入到一個叫做“elasticsearch”的集群中,這意味著,如果你在你的網絡中啟動了若干個節點,并假定它們能夠相互發現彼此,它們將會自動地形成并加入到一個叫做“elasticsearch”的集群中。
ps:當然你可以通過修改配置文件中node.name自行定義節點名稱
分片和復制(shards & replicas)一個索引可以存儲超出單個結點硬件限制的大量數據。比如,一個具有10億文檔的索引占據1TB的磁盤空間,而任一節點都沒有這樣大的磁盤空間;或者單個節點處理搜索請求,響應太慢。
為了解決這個問題,Elasticsearch提供了將索引劃分成多份的能力,這些份就叫做分片。當你創建一個索引的時候,你可以指定你想要的分片的數量。每個分片本身也是一個功能完善并且獨立的“索引”,這個“索引”可以被放置到集群中的任何節點上。
分片之所以重要,主要有兩方面的原因:
允許你水平分割/擴展你的內容容量
允許你在分片(潛在地,位于多個節點上)之上進行分布式的、并行的操作,進而提高性能/吞吐量
至于一個分片怎樣分布,它的文檔怎樣聚合回搜索請求,是完全由Elasticsearch管理的,對于作為用戶的你來說,這些都是透明的。
在一個網絡/云的環境里,失敗隨時都可能發生,在某個分片/節點不知怎么的就處于離線狀態,或者由于任何原因消失了,這種情況下,有一個故障轉移機制是非常有用并且是強烈推薦的。為此目的,Elasticsearch允許你創建分片的一份或多份拷貝,這些拷貝叫做復制分片,或者直接叫復制。
復制之所以重要,有兩個主要原因:
在分片/節點失敗的情況下,提供了高可用性。因為這個原因,注意到復制分片從不與原/主要(original/primary)分片置于同一節點上是非常重要的。
擴展你的搜索量/吞吐量,因為搜索可以在所有的復制上并行運行
總之,每個索引可以被分成多個分片。一個索引也可以被復制0次(意思是沒有復制)或多次。一旦復制了,每個索引就有了主分片(作為復制源的原來的分片)和復制分片(主分片的拷貝)之別。分片和復制的數量可以在索引創建的時候指定。在索引創建之后,你可以在任何時候動態地改變復制的數量,但是你事后不能改變分片的數量。
默認情況下,Elasticsearch中的每個索引被分片5個主分片和1個復制,這意味著,如果你的集群中至少有兩個節點,你的索引將會有5個主分片和另外5個復制分片(1個完全拷貝),這樣的話每個索引總共就有10個分片。
索引(_index)一個 索引應該是因共同的特性被分組到一起的文檔集合。一般來說,對比關系型數據庫,相當于SQL的數據庫或者schema。通過索引對文檔的進行創建、查詢、修改和刪除等操作。需要注意的是,索引的名稱必須全為小寫字符。
類型(_type)類型是索引內部的邏輯分區(category/partition),然而其意義完全取決于用戶需求。一般來說,類型就是為那些擁有相同的域的文檔做的預定義。對比關系型數據庫,對應的是“表”。
_idID?是一個字符串,當它和?_index以及?_type組合就可以唯一確定Elasticsearch 中的一個文檔。 當你創建一個新的文檔,要么提供自己的?_id,要么讓 Elasticsearch 幫你生成。
如果你的文檔有一個自然的標識符 (例如,一個?user_account
?字段或其他標識文檔的值),你應該使用如下方式的?index?API 并提供你自己?_id
PUT /{index}/{type}/{id} { "field": "value", ...}
如果你的數據沒有自然的 ID, Elasticsearch 可以幫我們自動生成 ID 。請求的結構調整為: 不再使用PUT請求(“使用這個 URL 存儲這個文檔”), 而是使用?POST請求(“存儲文檔在這個 URL 命名空間下”)。
現在該 URL 只需包含?_index?和?_type
POST /{index}/{type} { "field": "value", ...}
?
參考:
https://www.elastic.co/guide/...
http://blog.csdn.net/cnweike/...
http://www.cnblogs.com/ajianb...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67357.html
摘要:是一個基于的開源搜索引擎。的目的是通過簡單的來隱藏的復雜性,從而讓全文搜索變得簡單。它提供了許多合理的缺省值,并對初學者隱藏了復雜的搜索引擎理論。它開箱即用安裝即可使用,只需很少的學習既可在生產環境中使用。 Elasticsearch是一個基于Apache Lucene(TM)的開源搜索引擎。一開始公司里一位同事是直接采用Luncene進行開發的,整體開發下來,代碼量大,比較復雜,我就...
閱讀 2771·2021-10-11 11:08
閱讀 1489·2021-09-30 09:48
閱讀 1049·2021-09-22 15:29
閱讀 1037·2019-08-30 15:54
閱讀 976·2019-08-29 15:19
閱讀 527·2019-08-29 13:12
閱讀 3161·2019-08-26 13:53
閱讀 957·2019-08-26 13:28