ElasticSearch學習

一、ElasticSearch學習是什么

百度百科:

http://baike.baidu.com/link?url=K7SOCIh7Tji0y47VmIbIwMsfx_3Pn7FQpvjnUQB_CJwnVGQRraOng265h0-30nZeNU6Z0-_3zPJEyZFnH5Cfgq6hK_pmGNm48svsHqEIhGO

ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是第二最流行的企業(yè)搜索引擎。設計用于云計算中,能夠達到實時搜索,穩(wěn)定,可靠,快速,安裝使用方便。

我們建立一個網站或應用程序,并要添加搜索功能,令我們受打擊的是:搜索工作是很難的。我們希望我們的搜索解決方案要快,我們希望有一個零配置和一個完全免費的搜索模式,我們希望能夠簡單地使用JSON通過HTTP的索引數據,我們希望我們的搜索服務器始終可用,我們希望能夠一臺開始并擴展到數百,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個云的解決方案。Elasticsearch旨在解決所有這些問題和更多的問題。

Wikipedia:

https://en.wikipedia.org/wiki/Elasticsearch

Elasticsearchis asearch enginebased

onLucene. It provides a distributed,multitenant-capable full-text search engine with

anHTTPweb interface and

schema-freeJSONdocuments.

Elasticsearch is developed inJavaand is

released asopen sourceunder the

terms of theApache

License. Official clients are available inJava,.NET(C#),Python,Groovyand many

other languages.[2]Elasticsearch

is the most popular enterprise search engine followed byApache Solr, also based on Lucene.[3]

It is developed alongside a data

collection and log parsing engine calledLogstash, and an

analytics and visualisation platform calledKibana. The threeproducts are designed to be used as an integrated solution, referred to as the"ELK stack".

1.相關概念

1.1多租戶技術Multitenancy

1.1.1概述:

360百科:

http://baike.so.com/doc/6381782-6595432.html

多租戶技術(英語:multi-tenancy technology)或稱多重租賃技術,是一種軟件架構技術,它是在探討與實現如何于多用戶的環(huán)境下共用相同的系統或程序組件,并且仍可確保各用戶間數據的隔離性。

由于云計算議題的發(fā)燒,在共用的數據中心內如何以單一系統架構與服務提供多數客戶端相同甚至可定制化的服務,并且仍然可以保障客戶的數據隔離,讓多租戶技術成為云計算技術下的顯學。

Wikipedia:

https://en.wikipedia.org/wiki/Multitenancy

The term "software multitenancy"refers to asoftware

architecturein which a singleinstanceofsoftwareruns on a

server and serves multiple tenants. A tenant is a group of users who share a

common access with specific privileges to the software instance. With a

multitenant architecture, asoftware applicationis

designed to provide every tenant a dedicated share of the instance - including

its data, configuration, user management, tenant individual functionality

andnon-functional

properties. Multitenancy contrasts with multi-instance

architectures, where separate software instances operate on behalf of different

tenants.[1]

Some commentators regard multitenancy as

an important feature ofcloud

computing.[2][3]

1.1.2技術:

技術上,多租戶技術可以通過許多不同的方式來切割用戶的應用程序環(huán)境或數據。

數據面(dataapproach:供應商可以利用切割數據庫(database),切割存儲區(qū)(storage),切割結構描述(schema)或是表格(table)來隔離租戶的數據,必要時會需要進行對稱或非對稱加密以保護敏感數據,但不同的隔離作法有不同的實現復雜度與風險。

程序面(applicationapproach:供應商可以利用應用程序掛載(hosting)環(huán)境,于程(process)上切割不同租戶的應用程序運行環(huán)境,在無法跨越進程通信的情況下,保護各租戶的應用程序運行環(huán)境,但供應商的運算環(huán)境要夠強。

系統面(systemapproach:供應商可以利用虛擬化技術,將實體運算單元切割成不同的虛擬機,各租戶可以使用其中一至數臺的虛擬機來作為應用程序與數據的保存環(huán)境,但對供應商的運算能力要更要求。

1.1.3實現方式:

多租戶技術的實現重點,在于不同租戶間應用程序環(huán)境的隔離(applicationcontextisolation)以及數據的隔離(dataisolation),以維持不同租戶間應用程序不會相互干擾,同時數據的保密性也夠強。

應用程序部份:通過進程或是支持多應用程序同時運行的裝載環(huán)境(例如WebServer,像是Apache或IIS等)來做進程間的隔離,或是在同一個伺服程序(server)進程內以運行緒的方式隔離。

數據部份:通過不同的機制將不同租戶的數據隔離,Force.com是采用中介數據(metadata)的技術來切割,微軟MSDN的技術文件則是展示了使用結構描述的方式隔離。

2.ES技術技術概念

2.1基本概念

ElasticSearch(簡稱ES)是一個基于Lucene構建的開源、分布式、RESTful的全文本搜索引擎。

不過,ElasticSearch卻也不僅只是一個全文本搜索引擎,它還是一個分布式實時文檔存儲,其中每個field均是被索引的數據且可被搜索;也是一個帶實時分析功能的分布式搜索引擎,并且能夠擴展至數以百計的服務器存儲及處理PB級的數據。

如前所述,ElasticSearch在底層利用Lucene完成其索引功能,因此其許多基本概念源于Lucene。

2.1.1索引(Index)

ES將數據存儲于一個或多個索引中,索引是具有類似特性的文檔的集合。類比傳統的關系型數據庫領域來說,索引相當于SQL中的一個數據庫,或者一個數據存儲方案(schema)。

索引由其名稱(必須為全小寫字符)進行標識,并通過引用此名稱完成文檔的創(chuàng)建、搜索、更新及刪除操作。一個ES集群中可以按需創(chuàng)建任意數目的索引。

2.1.2類型(Type)

類型是索引內部的邏輯分區(qū)(category/partition),然而其意義完全取決于用戶需求。因此,一個索引內部可定義一個或多個類型(type)。一般來說,類型就是為那些擁有相同的域的文檔做的預定義。

例如,在索引中,可以定義一個用于存儲用戶數據的類型,一個存儲日志數據的類型,以及一個存儲評論數據的類型。類比傳統的關系型數據庫領域來說,類型相當于“表”。

2.1.3文檔(Document)

文檔是Lucene索引和搜索的原子單位,它是包含了一個或多個域的容器,基于JSON格式進行表示。

文檔由一個或多個域組成,每個域擁有一個名字及一個或多個值,有多個值的域通常稱為“多值域”。每個文檔可以存儲不同的域集,但同一類型下的文檔至應該有某種程度上的相似之處。

2.1.4映射(Mapping)

ES中,所有的文檔在存儲之前都要首先進行分析。用戶可根據需要定義如何將文本分割成token、哪些token應該被過濾掉,以及哪些文本需要進行額外處理等等。

另外,ES還提供了額外功能,例如將域中的內容按需排序。事實上,ES也能自動根據其值確定域的類型。

2.2集群概念

2.2.1集群(Cluster)

ES集群是一個或多個節(jié)點的集合,它們共同存儲了整個數據集,并提供了聯合索引以及可跨所有節(jié)點的搜索能力。

多節(jié)點組成的集群擁有冗余能力,它可以在一個或幾個節(jié)點出現故障時保證服務的整體可用性。

集群靠其獨有的名稱進行標識,默認名稱為“elasticsearch”。節(jié)點靠其集群名稱來決定加入哪個ES集群,一個節(jié)點只能屬一個集群。

如果不考慮冗余能力等特性,僅有一個節(jié)點的ES集群一樣可以實現所有的存儲及搜索功能。

2.2.2節(jié)點(Node)

運行了單個實例的ES主機稱為節(jié)點,它是集群的一個成員,可以存儲數據、參與集群索引及搜索操作。

類似于集群,節(jié)點靠其名稱進行標識,默認為啟動時自動生成的隨機Marvel字符名稱。

用戶可以按需要自定義任何希望使用的名稱,但出于管理的目的,此名稱應該盡可能有較好的識別性。

節(jié)點通過為其配置的ES集群名稱確定其所要加入的集群。

2.2.3分片(Shard)和副本(Replica)

ES的“分片(shard)”機制可將一個索引內部的數據分布地存儲于多個節(jié)點,它通過將一個索引切分為多個底層物理的Lucene索引完成索引數據的分割存儲功能,這每一個物理的Lucene索引稱為一個分片(shard)。

每個分片其內部都是一個全功能且獨立的索引,因此可由集群中的任何主機存儲。創(chuàng)建索引時,用戶可指定其分片的數量,默認數量為5個。

Shard有兩種類型:primary和replica,即主shard及副本shard。

Primary shard用于文檔存儲,每個新的索引會自動創(chuàng)建5個Primary

shard,當然此數量可在索引創(chuàng)建之前通過配置自行定義,不過,一旦創(chuàng)建完成,其Primary shard的數量將不可更改。

Replica shard是Primary Shard的副本,用于冗余數據及提高搜索性能。

特點:

1.每個Primary shard默認配置了一個Replica

shard,但也可以配置多個,且其數量可動態(tài)更改。ES會根據需要自動增加或減少這些Replica shard的數量。

2. ES集群可由多個節(jié)點組成,各Shard分布式地存儲于這些節(jié)點上。

3. ES可自動在節(jié)點間按需要移動shard,例如增加節(jié)點或節(jié)點故障時。簡而言之,分片實現了集群的分布式存儲,而副本實現了其分布式處理及冗余功能。

二、原理

http://www.cnblogs.com/valor-xh/p/6095894.html

1.搜索引擎組件介紹

著名的開源程序Lucene是索引組件,它提供了搜索程序的核心索引和搜索模塊,例如圖中的“Index”及下面的部分;而ElasticSearch則更像一款搜索組件,它利用Lucene進行文檔索引,并向用戶提供搜索組件,例如“Index”上面的部分。二者結合起來組成了一個完整的搜索引擎。

2.ES的數據查詢

查詢執(zhí)行過程通常要分成兩個階段,分散階段合并階段

分散階段是向所查詢的索引中的所有shard發(fā)起執(zhí)行查詢的過程,合并階段是將各shard返回的結果合并、排序并響應給客戶端的過程。

向ElasticSearch發(fā)起查詢操作有兩種方式:一是通過RESTful request API傳遞查詢參數,也稱“query-string”;另一個是通過發(fā)送REST request body,也稱作JSON格式。

三、特性

1.實時文檔存儲,文檔對象的每個field都建立了索引,都能被檢索

2.構建適應于不同規(guī)模的應用的體系結構,在此之上實現分布式搜索。

3.為其他平臺系統提供了具有rest風格的原生java api。也有hadoop的依賴包

4.簡單可用性強,不需要對搜索原理有深入的理解。平臺有免費模式。

具有可伸縮性,靈活的構建和易用性。提供一個易用性的平臺,進行規(guī)模擴展時無需考慮核心功能與用戶自定義選項間妥協。

四、和solr區(qū)別

1.Solr利用Zookeeper進行分布式管理;而Elasticsearch自身帶有分布式協調管理功能;

2.Solr支持更多格式的數據json,XML等;而Elasticsearch僅支持json文件格式;

3.Solr官方提供的功能更多;而Elasticsearch本身更注重于核心功能,高級功能多由第三方插件提供;

4.Solr在傳統的搜索應用中表現好于Elasticsearch,但在處理實時搜索應用時效率明顯低于Elasticsearch。

5.Solr是傳統搜索應用的有力解決方案,但Elasticsearch更適用于新興的實時搜索應用。

Ps:走過的路,每一步都算數,沉淀我所學習,累積我所見聞,分享我所體驗;

文\樓外樓,未經許可,禁止轉載。(微信公眾號:PM天秤座的樓外樓)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • es 的來源 問題拆解 如果用數據庫來實現會怎么樣? 什么是全文檢索? 什么是 Lucene? 數據庫實現 先看第...
    小聰明李良才閱讀 875評論 0 0
  • 歡迎訪問本人博客:http://wangnan.tech Elasticsearch是一個可伸縮的開源全文搜索和分...
    GhostStories閱讀 3,187評論 0 10
  • Solr&ElasticSearch原理及應用 一、綜述 搜索 http://baike.baidu.com/it...
    樓外樓V閱讀 7,651評論 1 17
  • 最近的周末都過的還算充實,基本的主題是行走+閱讀。以前很多時候會犯懶,周末窩在家里,有時什么也沒干時間就這樣流走,...
    beirikui閱讀 354評論 0 1
  • 昨天到了杭州,下午同學帶我去了主題餐廳,還去逛了最繁華的街道,吃到了特色食品,住在了四星酒店,今天進了園區(qū),越來...
    心羽暖姐姐閱讀 116評論 0 0

友情鏈接更多精彩內容