一、Es簡單介紹 含義:Elasticsearch是一個可伸縮的開源全文搜索和分析引擎,它使你可以快速且接近實時的去保存,查詢和分析海量的數據,他的潛在應用場景是作為一些有複雜搜索功能和需求的應用的搜索引擎。 與關係型資料庫的對比: Relational DB -> Databases -> Tab ...
一、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