Elasticsearch基礎實踐

Elasticsearch是高度可伸縮的開源全文搜索和分析引擎。它允許我們快速實時地存儲、搜索、分析大數據。Elasticsearch是一個接近實時的搜索平臺,對大數據量的處理我們通過搭建ES集羣來完成。

1,集羣的幾個概念:

主節點

   服務器只作爲一個主節點,但不存儲任何索引數據,主節點負責創建索引、刪除索引、分配分片、追蹤集羣中的節點狀態等工作。一個節點啓動後,就會使用Zen Discovery機制去尋找集羣中的其他節點,並與之建立連接。 集羣中會從候選主節點中選舉出一個主節點,爲了防止腦裂現象, 防止某些主節點自成一個集羣, 主節點的個數最好是奇數個,並且不少於3個;
   候選主節點的設置方法是設置node.mater爲true; 隨着集羣的擴大,一般設置專用的候選主節點,不在和數據節點複用node.data = false。

數據節點 

     數據節點負責索引數據的存儲和相關具體操作,比如CRUD、搜索、聚合。數據節點對機器配置要求比較高,首先需要有足夠的磁盤空間來存儲數據,其次數據操作對系統CPU、Memory和IO的性能消耗都很大。通常隨着集羣的擴大,需要增加更多的數據節點來提高可用性。可通過配置node.master = false,node.data = true來實現
協調節點

     專用的協調節點,該node服務器即不會被選作主節點,也不會存儲任何索引數據。該服務器主要用 於查詢負載均衡。在查詢的時候,通常會涉及到從多個node服務器上查詢數據,並請 求分發到多個指定的node服務器,並對各個node服務器返回的結果進行一個彙總處理,最終返回給客戶端,可通過配置node.master = false;node.data = false來實現

2,常用工具:

elasticsearch-head

是用於監控 Elasticsearch 狀態的客戶端插件,包括數據可視化、執行增刪改查操作等

最簡單的安裝:

地址:https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm/
下載後解壓 拖到瀏覽器完成安裝
連接輸入框中輸入es集羣中任意一個節點的9200地址,例如:http://192.168.1.2:9200/點擊連接即可使用

Kibana:

Kibana 是一款開源的數據分析和可視化平臺,它是 Elastic Stack 成員之一,設計用於和 Elasticsearch 協作。您可以使用 Kibana 對 Elasticsearch 索引中的數據進行搜索、查看、交互操作。您可以很方便的利用圖表、表格及地圖對數據進行多元化的分析和呈現。
Kibana 可以使大數據通俗易懂。它很簡單,基於瀏覽器的界面便於您快速創建和分享動態數據儀表板來追蹤 Elasticsearch 的實時數據變化。
搭建 Kibana 非常簡單。您可以分分鐘完成 Kibana 的安裝並開始探索 Elasticsearch 的索引數據 — 沒有代碼、不需要額外的基礎設施,安裝過程自己搜索一下

3,基本概念和數據結構

Indices(索引) -> Types(類型) -> Documents(文檔) -> Fields(域/字段)

1,字段核心數據類型:

字符串類型
text:全文檢索需要分詞的類型。
keyword:精確值。合適分組排序。不進行分詞,只能通過精確值搜索到,支持模糊、精確查詢,支持聚合等。

數字類型
long, integer, short, byte, double, float, half_float, scaled_float

日期類型
date

布爾類型
boolean
true 和 false

二進制類型
binary

範圍類型
integer_range, float_range, long_range, double_range, date_range


2,複雜數據類型 Complex datatypes

數組類型
Array support does not require a dedicated type
數組支持不需要專用類型

對象類型
object for single JSON objects
單個JSON對象的對象

嵌套類型
nested for arrays of JSON objects

4 RESTful API

下面我們通過Dev Tools來總結下Elasticsearch的RESTful API一些很使用的操作:

創建索引
number_of_shards

PUT /index_1
{
  "settings":{
    "number_of_shards":5,
    "number_of_replicas":0
  },
  "mappings":{
      "properties":{
          "name":{"type":"text"},
          "city":{"type":"keyword"},
          "age": {"type":"integer"}
      }
    
  }
}

成功返回:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "index_1"
}

獲得index的setting和mapping
GET /t_dmp_user_tags/_settings
GET /t_dmp_user_tags/_mapping

增加docment:
PUT /index_1/_doc/1
{
  "name" : "zhangsan",
  "city" : ["北京","西安"],
  "age": 15
}

PUT /index_1/_doc/2
{
  "name" : "zhangsan",
  "city" : ["上海"],
  "age": 15
}


修改docment
修改年齡爲25歲,其他不變
PUT /index_1/_doc/_update
{
  "age": 25
}

修改年齡爲25歲,其他不變
POST /index_1/_update/1
{"doc":{"age": 15}}

刪除某條docment
DELETE /index_1/_doc/3

多條件AND查詢
GET /index_1/_search
{
  "query": {
    "bool": {
      "must": [
          {"terms": {"city": ["北京"]}},
          {"term": {"age":15}}
    ]
    }
  }
}


分組求count
默認10條,這裏我們設置其返回100條
GET /index_1/_search
{
  "size": 0,
  "aggs": {
    "group_by_countrys": {
      "terms": {
        "field": "city",
        "size":100
      }
    }
  }
}


查詢結果求count

OR is spelled should
AND is spelled must
NOR is spelled should_not

GET /index_1/_count
{
  "query": {
    "bool": {
      "should": [
          {"terms": {"city": ["北京"]}},
          {"term": {"age":15}}
    ]
    }
  }
}


刪除索引
DELETE /index_1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章