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