本片文章記錄了elasticsearch概念、特色、集羣、插件、API使用方法。html
1.elasticsearch的概念及特色。
概念:elasticsearch是一個基於lucene的搜索服務器。lucene是全文搜索的一個框架。
特色:java
- 分佈式,可擴展,高可用。
- 可以實時搜索分析數據。
- 複雜的RESTful API。
總結:是一個採用RESTful API標準,實現分佈式、可擴展以及高可用的實時數據存儲分析的全文搜索工具。
node
2.elasticsearch涉及的相關概念。(關係非關係對比)
相關概念:
- Node: 裝有一個elasticsearch服務器的節點。
- Cluster: 有一個或多個Node組成的集羣,共同工做。
- Document: 一個可被搜素的基礎信息單元。
- Index: 擁有類似特徵的文檔的集合。
- Type: 一個索引中能夠定義一種或多種類型。
- Filed: 是elasticsearch的最小單位,至關於數據的某一列。
- Shards: 索引分紅若干份,每一份就是一個shard。默認5份。
- Replics: 是索引的一份或者多份拷貝。
關係型與非關係型對比:
database ----> Index
table ----> Type
row ----> Document
column ----> Filed
內置字段和字段類型:
- 內置字段:_uid,_id,_type,_source,_all,_analyzer,_boost,_parent,_routing,_index,_size,_timestamp,_ttl
- 字段類型:string,integer/long,float/double,boolean,null,datelinux
3.elasticsearch架構詳解。
git
4.什麼是倒排索引。
概念:倒排索引(英語:Inverted index),也常被稱爲反向索引、置入檔案或反向檔案。是一種索引方法,被用來存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。它是文檔檢索系統中最經常使用的數據結構。
正向索引和倒排索引對比:
內容 --正向--> 關鍵字/詞
內容 <--倒排-- 關鍵字/詞github
5.RESTful API以及curl。
概念:RESTful 表現層狀態轉化。
- 表現層:圖片,文字,視頻等
- 轉化後:資源
API:應用程序接口。
RESTful API:一種資源操做的應用程序接口。
curl:一個利用URL語法在命令行下工做的文件傳輸工具,支持文件上傳和下載。
curl經常使用參數:
- I 獲取頭部信息
- v 獲取握手過程
- o 保存文件
curl -o baidu.html www.baidu.com
curl -I -v www.baidu.comjson
6.elasticsearch單機/集羣安裝配置。
單機安裝(node1上安裝elasticsearch)
①.安裝jdk1.8_65
[root@node1 ~]# rpm -ivh jdk-8u65-linux-x64.rpm
②.下載安裝elasticsearch,並設置開啓自啓動。
[root@node1 ~]# wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.4/elasticsearch-2.3.4.rpm
[root@node1 ~]# rpm -ivh elasticsearch-2.3.4.rpm
[root@node1 ~]# chkconfig --add elasticsearch
③.修改配置文件,並啓動服務。
[root@node1 ~]# grep -Ev "^#|^$" /etc/elasticsearch/elasticsearch.yml
network.host: 192.168.3.1
http.port: 9200
[root@node1 ~]# service elasticsearch start
④.瀏覽器訪問IP:9200查看結果。
http://192.168.3.1:9200數組
集羣安裝(node1|node2安裝elasticsearch)
①.node2上安裝,安裝同單機node1同樣。
②.修改node1和node2配置文件。
node1:
[root@node1 ~]# grep -Ev "^#|^$" /etc/elasticsearch/elasticsearch.yml
cluster.name: elk-xkops
node.name: node-1
network.host: 192.168.3.1
http.port: 9200
node2:
[root@node2 ~]# grep -Ev "^#|^$" /etc/elasticsearch/elasticsearch.yml
cluster.name: elk-xkops
node.name: node-2
network.host: 192.168.3.2
discovery.zen.ping.unicast.hosts: ["192.168.3.1"]瀏覽器
*註釋:關於單播和多播,爲了防止節點的任意加入,官方建議集羣關閉多播,使用單播集羣。單播列表只要能保證與集羣中任一節點能通訊便可,不須要列出全部集羣節點。ruby
7.elasticsearch經常使用插件。(head,kopf,bigdesk)
在線安裝:
①.安裝head插件。
[root@node1 ~]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
②.安裝bigdesk插件。
[root@node1 ~]# /usr/share/elasticsearch/bin/plugin install hlstudio/bigdesk
③.安裝kopf插件。
[root@node1 ~]# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
離線安裝:
①.安裝head插件。
[root@node1 ~]# /usr/share/elasticsearch/bin/plugin install file:/elk/soft/elasticsearch-head-master.zip
②.安裝bigdesk插件。
[root@node1 ~]# /usr/share/elasticsearch/bin/plugin install file:/elk/soft/bigdesk-master.zip
③.安裝kopf插件。
[root@node1 ~]# /usr/share/elasticsearch/bin/plugin install file:/elk/soft/elasticsearch-kopf-master.zip
瀏覽器端訪問插件:
http://192.168.3.1:9200/_plugin/head
http://192.168.3.1:9200/_plugin/bigdesk
http://192.168.3.1:9200/_plugin/kopf
8.使用RESTful API操做elasticsearch。
①.索引初始化配置:建立、獲取、刪除。
初始化配置school索引:
curl -XPUT 'http://192.168.3.1:9200/school/' -d '{ "settings":{ "index":{ "number_of_shards": 5, "number_of_replicas": 1 } } }'
獲取索引配置信息:
curl -XGET 'http://192.168.3.1:9200/school/_settings/' curl -XGET 'http://192.168.3.1:9200/school,index_name/_settings/' curl -XGET 'http://192.168.3.1:9200/_all/_settings/'
刪除索引配置信息:
curl -XDELETE 'http://192.168.3.1:9200/school/' curl -XDELETE 'http://192.168.3.1:9200/school,index_name/' curl -XDELETE 'http://192.168.3.1:9200/_all/'
②.建立、更新、刪除索引文檔。
建立索引文檔:
curl -XPUT 'http://192.168.3.1:9200/school/students/1' -d '{ "title": "devops", "name":{ "first": "guzhang", "last": "wu" }, "age": 25 }'
*註釋:school爲索引名稱,students爲文檔類型,1爲文檔ID(可省略)。
獲取索引文檔(經過source指定字段獲取信息):
curl -XGET 'http://192.168.3.1:9200/school/students/1' curl -XGET 'http://192.168.3.1:9200/school/students/1?_source=name,age'
更新索引文檔:
- 覆蓋 意即從新建立
- _update 使用API更新
curl -XPOST 'http://192.168.3.1:9200/school/students/1/_update' -d '{ "doc":{ "age": 30 } }'
刪除索引文檔:
curl -XDELETE 'http://192.168.3.1:9200/school/students/1'
使用bulk批量建立文檔:
官方元數據:
https://www.elastic.co/guide/en/kibana/3.0/snippets/shakespeare.json
https://raw.githubusercontent.com/bly2k/files/master/accounts.zip
導入官方元數據:
[root@node1 ~]# curl -XPOST 'http://192.168.3.1:9200/shakesapear/act/_bulk?pretty' --data-binary @shakespeare.json
[root@node1 ~]# curl -XPOST 'http://192.168.3.1:9200' --data-binary @account.json
使用mget批量獲取文檔:
mget能夠快速的同時檢索多個文檔。mget API參數是一個docs數組,數組的每一個節點定義一個文檔的——index、_type、_id元數據。
獲取多個索引下文檔信息:
curl -XGET 'http://192.168.3.1:9200/_mget' -d '{ "docs":[ { "_index": "bank", "_type:": "account", "_id": 1 }, { "_index": "bank", "_type:": "account", "_id": 2 }, { "_index": "shakespeare", "_type:": "act", "_id": 1 } ] }'
獲取相同索引下多個文檔信息,並指定字段獲取(_source)。
curl -XGET 'http://192.168.3.1:9200/bank/account/_mget' -d '{ "docs":[ { "_id": 1, "_source": "age" }, { "_id": 2, "_source": "firstname" } ] }'
mapping:
映射:建立索引的時候,能夠預先定義字段的類型及相關屬性。
做用:這樣會讓索引創建得更加的細緻和完善。
分類:靜態映射和動態映射。
動態映射:自動根據數據進行相應的映射。
靜態映射:自定義字段映射數據類型。
*提示:能夠修改以下文件,共用mapping。
/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-output-elasticsearch-2.7.1-java/lib/logstash/outputs/elasticsearch/elasticsearch-template.json