第一步:搞清楚這個框架(技術)是幹什麼的,解決了什麼問題和痛點,同類「競品」還有哪些css
第二步:怎麼用html
第三步:瞭解原理web
Elasticsearch
是一個基於 Lucene
的 搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web
接口。數據庫
Elasticsearch
是用 Java
語言開發的,是一種流行的企業級搜索引擎。數組
Elasticsearch
的底層是開源庫Lucene
。咱們沒有辦法直接使用Lucene
,必須本身寫代碼去調用它的接口。
Elasticsearch
是Lucene
的封裝,提供了RESTful API
的操做接口,開箱即用。服務器
使用數據庫 來作搜索業務,不能很好的知足需求。框架
雖然某一程度上也能夠視爲數據庫,可是它更主要的身份仍是一個優秀的全文搜索引擎。它的出現解決了一部分傳統關係型數據庫和NoSQL非關係型數據庫所沒有辦法高效完成的一些工做,好比高效的全文檢索,結構化檢索,甚至是數據分析。curl
eg
:數據庫在作模糊查詢時,如LIKE
語句,它會遍歷整張表,同時進行字符串匹配。elasticsearch
而 es
是基於 倒敘索引 的 ,檢索速度很是快。分佈式
Elasticsearch
支持中文分詞插件
Elasticsearch
支持全文搜索和相關度評分。這樣在返回結果就會根據分數由高到低排列。分數越高,意味着和查詢語句越相關。
MySQL的Navicat
Elasticsearch
的 Kibana
Java API
Java客戶端是經過 9300端口 並使用Elasticsearch 的原生傳輸協議和集羣交互。
集羣中的節點經過端口 9300彼此通訊。若是這個端口沒有打開,節點將沒法造成一個集羣。
RESTful API with Json over HTTP
基於HTTP的 Json RESTful API
全部其它語言可使用 RESTful API 經過端口 9200 和 Elasticsearch 進行通訊,
也可使用 curl
命令來和 Elasticsearch 交互。
curl 是經常使用的命令行工具,用來請求 web服務器。它的名字就是客戶端(client)的URL工具的意思。
Elasticsearch 是面向文檔的,意味着它存儲整個對象或 文檔。
Elasticsearch 不只存儲文檔,並且索引每一個文檔的內容,使之能夠被檢索。
(好比說,存儲員工文檔,一個文檔表明一個員工,存儲數據到Elasticsearch的行爲叫作索引。)
在Elasticsearch中,咱們對文檔進行索引、檢索、排序和過濾,而不是對行列數據。
這是一種徹底不一樣的思考數據方式,也是Elasticsearch能支持複雜全文檢索的緣由。
Elasticsearch 使用 JSON(JavaScript Object Notation)做爲文檔的序列化格式。
索引
INSERT
關鍵字倒排索引
關係型數據庫經過增長一個索引,好比一個B-Tree索引 到指定的列上,以便提高數據檢索的速度。
Elasticsearch 和 Lucene 使用一個叫作 倒排索引的結構來達到相同的目的。
默認的,一個文檔中的每個屬性都是 被索引的 (有一個倒排索引) 和可搜索的。
一個沒有倒排索引的屬性是不能被搜索到的。
檢索所有數據
GET _search
{
"query": {
"match_all": {}
}
}
檢索指定索引數據
GET /indexName/_search{}
檢索指定索引的指定字段
GET /indexName/_search
{
"query": {
"match": {
"field":"text"
//"title": "elasticsearch"
}
}
}
短語搜索
精確查詢一個短語 「Time is money」
//使用 match_phrase
GET /indexName/_search
{
"query": {
"match_phrase": {
"field": "Time is money"
}
}
}
高亮搜索
新增 highlight
參數,組合查詢
GET /indexName/_search
{
"query": {
"match": {
"field": "text"
}
},
"highlight": {
"fields": {
"field": {}
}
}
}
//高亮部分 以 HTML 標籤 封裝
分析
Elasticsearch 有一個功能叫作聚合
(aggregations),容許咱們基於數據生成一些精細的分析結果。
聚合與SQL中的GROUP BY
相似但更強大。
GET /indexName/_search
{
"aggs": {
"NAME": {
"AGG_TYPE": {}
}
}
}
Elasticsearch天生分佈式,而且在設計時,屏蔽了分佈式的複雜性。
Hadoop Database
HBase
是Apache的 Hadoop
項目的子項目。
HBase
是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統。
HBase
不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫, HBase
基於列的而不是基於行的模式.
HBase
的原型是Google的BigTable
論文。
MySQL
沒法知足海量的數據存儲,
MySQL
-> 面向行存儲
HBase
-> 面向行存儲
圖
表名:webtable
兩行:com.cnn.www
和 com.example.www
三個列族:contents
、anchor
、people
對於第一行com.cnn.www
anchor
列族包含兩列:anchor:cssnsi.com
和 anchor:my.look.ca
{
"com.cnn.www": {
contents: {
t6: contents:html: "<html>..."
t5: contents:html: "<html>..."
t3: contents:html: "<html>..."
}
anchor: {
t9: anchor:cnnsi.com = "CNN"
t8: anchor:my.look.ca = "CNN.com"
}
people: {}
}
"com.example.www": {
contents: {
t5: contents:html: "<html>..."
}
anchor: {}
people: {
t5: people:author: "John Doe"
}
}
}
圖
HBase
概念視圖中顯示的空單元根本不存儲。
表
建立一個HBase
表:
create ‘<table name>’,’<column family>’
行
HBase
中的行是邏輯上的行,物理模型上行時按列族(column family
)分別存取的。
列族
Hbase
表中的每一個列都歸屬於某個列族,
列名由其 列族前綴 和 限定符 組成,
列的限定符是列族中數據的索引。
eg
:
列族:course
列名:course:math
,course:english
…
cell
由行和列的座標交叉決定;
單元格是有版本的;
單元格的內容是未解析的字節數組
單元格是由行、列族、列限定符、值和表明值版本的時間戳組成的,({row key,column( =<family>+<qualifier>),version})惟一肯定單元格。cell中的數據是沒有類型的,所有是字節碼形式存儲。