1. 程式人生 > >Elasticsearch學習筆記

Elasticsearch學習筆記

高可用 byte 操作 ik分詞器 b-tree索引 簡單介紹 分析算法 -i tps

一、Es簡單介紹

含義:Elasticsearch是一個可伸縮的開源全文搜索和分析引擎,它使你可以快速且接近實時的去保存,查詢和分析海量的數據,他的潛在應用場景是作為一些有復雜搜索功能和需求的應用的搜索引擎。

與關系型數據庫的對比:

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indexs -> Types -> Documents -> Fields

Elasticsearch集群可以包含多個索引(index)(數據庫),每一個索引可以包含多個類型(types)(表),每一個類型包含多個文檔(documents)(行),然後每個文檔包含多個字段(Fields)(列)。

二、Es相關詞語介紹

cluster

集群是一個或多個節點(服務器)的集合在一起,保存所有的數據,聯合所有節點一起提供查詢能力。
一個集群有一個唯一的名字,默認是“elasticsearch",集群名很重要,因為集群節點加入集群的唯一方式是根據這個名字。

node

節點的默認名字是漫威的一個角色,默認加入集群elasticsearch

index

索引是一系列具有相似特點文檔的集合
實際上,索引只是一個用來指向一個或多個分片(shards)的“邏輯命名空間(logical namespace)

「索引」含義的區分
你可能已經註意到索引(index)這個詞在Elasticsearch中有著不同的含義,所以有必要在此做一下區分:
索引(名詞) :如上文所述,一個索引(index)就像是傳統關系數據庫中的數據庫,它是相關文檔存儲的地方,index的復數是indices 或indexes。
索引(動詞) :「索引一個文檔」表示把一個文檔存儲到索引(名詞)裏,以便它可以被檢索或者查詢。這很像SQL中的INSERT關鍵字,差別是,如果文檔已經存在,新的文檔將覆蓋舊的文檔。

倒排索引 傳統數據庫為特定列增加一個索引,例如B-Tree索引來加速檢索。Elasticsearch和Lucene使用一種叫做倒排索引(inverted index)的數據結構來達到相同目的。

Type

索引中,類型是一種邏輯的分類,它的意義由使用者來賦予

mapping

每個類型(type)都有自己的映射(mapping)或者結構定義,就像傳統數據庫表中的列一樣。所有類型下的文檔被存儲在同一個索引下,但是類型的映射(mapping)會告訴Elasticsearch不同的文檔如何被索引
Elasticsearch支持以下簡單字段類型:
類型 表示的數據類型
String string
Whole number byte, short, integer, long
Floating point float, double
Boolean boolean
Date date

document

文檔是搜索信息的基本單元,用json表達,文檔必須被包含於一個type中

shards&replicas(主分片&副分片)

分片重要性:

Es中所有數據均衡的存儲在集群中各個節點的分片中,會影響ES的性能、安全和穩定性, 所以很有必要了解一下它。

分片是什麽?

簡單來講就是咱們在ES中所有數據的文件塊,也是數據的最小單元塊,整個ES集群的核心就是對所有分片的分布、索引、負載、路由等達到驚人的速度

實列場景:

Es默認設置為5個主分片和1個副分片,也可以根據使用場景自己設置。

假設 IndexA 有2個分片,我們向 IndexA 中插入10條數據 (10個文檔),那麽這10條數據會盡可能平均的分為5條存儲在第一個分片,剩下的5條會存儲在另一個分片中。

和主流關系型數據庫的表分區的概念有點類似,如果你比較熟悉關系型數據庫的話。

es提供能力,讓你把index分成好幾個部分,叫做分片,當你創建索引的時候,你可以簡單的定義分片的個數,每個分片本身是一個獨立的功能齊全的“索引”,可以被放到任何的集群節點中

分片的意義:

1.可以水平分割和擴展數據
2.可以把操作分配給多個分區,提高性能

es允許你制作一個或多個分片的副本。叫做復制分片
復制分片的意義:
1、他提供了高可用性,副本和原始分區不處於一個節點中。
2.他提高了性能,因為搜索可以在任何分區上允許。

analysis(分詞器和拼音分詞)

ik分詞器下載鏈接:https://github.com/medcl/elasticsearch-analysis-ik/releases

拼音分詞下載鏈接:https://github.com/medcl/elasticsearch-analysis-pinyin/releases

安裝時對應elasticsearch版本!!!!

全文搜索引擎會用某種算法對要建索引的文檔進行分析, 從文檔中提取出若幹Token(詞元), 這些算法稱為Tokenizer(分詞器), 這些Token會被進一步處理, 比如轉成小寫等, 這些處理算法被稱為Token Filter(詞元處理器), 被處理後的結果被稱為Term(詞), 文檔中包含了幾個這樣的Term被稱為Frequency(詞頻)。 引擎會建立Term和原文檔的Inverted Index(倒排索引), 這樣就能根據Term很快到找到源文檔了。 文本被Tokenizer處理前可能要做一些預處理, 比如去掉裏面的HTML標記, 這些處理的算法被稱為Character Filter(字符過濾器), 這整個的分析算法被稱為Analyzer(分析器)。

Es(默認)分詞器和分詞器插件:

GET /my_index/_analyze
{
  "text":"中華人民共和國"
}

(默認)standard:1中 2華 3人 4民 5共 6和 7國

GET /my_index/_analyze
{
  "text":"中華人民共和國",
  "analyzer":"ik_smart"
}  

ik_smart:1中華人名共和國

GET /my_index/_analyze
{
  "text": "中華人民共和國",
  "analyzer": "ik_max_word"
}

ik_max_word:1中華人名共和國 2中華人民 3中華 4華人 5人民共和國 6人民 7共和國 8共和 9國

GET my_index/_analyze
{
  "text":"劉德華",
  "analyzer": "pinyin"
}

pinyin: 1liu 2ldh 3de 4hua

elasticsearch 索引優化:

http://itindex.net/detail/52316-elasticsearch-%E7%B4%A2%E5%BC%95-%E4%BC%98%E5%8C%95

拼音分詞下載:

http://itindex.net/detail/52316-elasticsearch-%E7%B4%A2%E5%BC%95-%E4%BC%98%E5%8C%97

ik分詞器下載:

http://itindex.net/detail/52316-elasticsearch-%E7%B4%A2%E5%BC%95-%E4%BC%98%E5%8C%96

Elasticsearch學習筆記