前戏

主要的基础概念有:Node, Index,Type,Document,Field,shard和replicas.

Node(节点):运行单个ES实例的服务器

Cluster(集群):一个或多个节点构成集群

Index(索引):索引是多个文档的集合

Type(类型):一个Index可以定义一种或多种类型,将Document逻辑分组

Document(文档):Index里每条记录称为Document,若干文档构建一个Index

Field(字段):ES存储的最小单元

Shards(分片):ES将Index分为若干份,每一份就是一个分片

Replicas(副本):Index的一份或多份副本

为了便于理解,我们和系型数据库做一个对比:​

关系型数据库(如mysql,oracle等)

elasticsearch

database或schema

index

table

type

row

document

column或field

field

ES是分布式搜索引擎,每个索引有一个或多个分片(shard),索引的数据被分配到各个分片上。你可以看作是一份数据分成了多份给不同的节点。

当ES集群增加或删除节点时,shard会在多个节点中均衡分配。默认是5个primary shard(主分片)和1个replica shard(副本,用于容错)。

ES基础API操作

什么是API?

API(Application Programming Interface)应用程序编程接口,就是无需访问程序源码或理解内部工作机制就能实现一些相关功能的接口。

RestFul API 格式

curl -X<verb> ‘<protocol>://<host>:<port>/<path>?<query_string>’-d ‘<body>’

参数

描述

verb

HTTP方法,比如GET、POST、PUT、HEAD、DELETE

host

ES集群中的任意节点主机名

port

ES HTTP服务端口,默认9200

path

索引路径

query_string

可选的查询请求参数。例如?pretty参数将返回JSON格式数据

-d

里面放一个GET的JSON格式请求主体

body

自己写的 JSON格式的请求主体

elasticseearch的API很多, 我们运维人员主要用到以下几个要介绍的较简单的API。

更多API参考: ​​https://www.elastic.co/guide/en/elasticsearch/reference/6.2/index.html​

查看节点信息

通过curl或浏览器访问​​http://192.168.100.40:9200/_cat/nodes?v(ip​​为ES节点IP,如果有ES集群,则为ES任意节点IP)

Elasticsearch基础概念_json

查看索引信息

通过curl或浏览器访问​​http://192.168.100.40:9200/_cat/indices?v​

Elasticsearch基础概念_elasticsearch_02

新增索引

[root@test1 ~]# curl -X PUT  http://192.168.100.40:9200/test_index
{"acknowledged":true,"shards_acknowledged":true,"index":"test_index"}[root@test1 ~]#
[root@test1 ~]# curl http://192.168.100.40:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open test_index NZIMDUzzQ6-eRdATRVODbw 5 1 0 0 1.1kb 460b
[root@test1 ~]#

Elasticsearch基础概念_json_03

green:所有的主分片和副本分片都已分配。你的集群是100%可用的。

yellow:所有的主分片已经分片了,但至少还有一个副本是缺失的。不会有数据丢失,所以搜索结果依然是完整的。不过,你的高可用性在某种程度上被弱化。如果 更多的 分片消失,你就会丢数据了。把 yellow 想象成一个需要及时调查的警告。

red:至少一个主分片(以及它的全部副本)都在缺失中。这意味着你在缺少数据:搜索只能返回部分数据,而分配到这个分片上的写入请求会返回一个异常。

删除索引

curl -X DELETE http://192.168.100.40:9200/test_index

ES查询语句

ES提供一种可用于执行查询JSON式的语言,被称为Query DSL。

针对elasticsearch的操作,可以分为增、删、改、查四个动作。

查询匹配条件:

  • match_all
  • from,size
  • match
  • bool
  • range

查询应用案例:

导入数据源

使用官方提供的示例数据:

1, 下载并导入进elasticsearch

[root@test2 ~]# wget https://raw.githubusercontent.com/elastic/elasticsearch/master/docs/src/test/resources/accounts.json
导入进elasticsearch
[root@test2 ~]# curl -H "Content-Type: application/json" -XPOST "192.168.100.40:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"
curl -H "Content-Type: application/json" -XPOST "10.1.1.12:9200/bank/_doc/_bulk?pretty&refresh" --data-binary "@accounts.json"
查询确认
[root@test2 ~]# curl http://192.168.100.41:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open bank DejnYeioQFe3KxhRBlq6og 5 1 1000 0 949.3kb 474.6kb

Elasticsearch基础概念_数据_04

查询bank索引的数据(使用查询字符串进行查询)

curl -X GET "192.168.100.40:9200/bank/_search?q=*&sort=account_number:asc&pretty"

说明:

默认结果为10条

_search  属于一类API,用于执行查询操作

q=* ES批量索引中的所有文档

sort=account_number:asc 表示根据account_number按升序对结果排序

pretty调整显示格式

Elasticsearch基础概念_elasticsearch_05

查询bank索引的数据 (使用json格式进行查询)​

curl -X GET "192.168.100.40:9200/bank/_search" -H 'Content-Type: application/json' -d'{
> "query": { "match_all": {} },
> "sort": [
> { "account_number": "asc" }
> ]
> }
> '
注意: 最后为单引号

持续更新!!!