Near Realtime(NRT):近实时,两个意思,从写入数据到数据能够被搜索到有一个小延迟(大概1秒);基于es执行搜索和分析能够达到秒级node
Cluster:集群,集群中有多个节点(Node),其中有一个为主节点,这个主节点是能够经过选举产生的,主从节点是对于集群内部来讲的。es的一个概念就是去中心化,字面上理解就是无中心节点。集群中有多个节点(node),其中有一个为主节点,这个主节点是能够经过选举产生的,主从节点是对于集群内部来讲的。es的一个概念就是去中心化,字面上理解就是无中心节点。docker
Node:节点,集群中的一个节点,节点也有一个名称(默认是随机分配的),节点名称很重要(在执行运维管理操做的时候),若是直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,固然一个节点也能够组成一个elasticsearch集群。json
Document&field:文档,es中的最小数据单元。一个document能够是一条客户数据,一条商品分类数据等,一般用JSON数据结构表示,每一个index下的type中,均可以去存储多个document。一个document里面有多个field,每一个field就是一个数据字段。bootstrap
product documentapi
{ "product_id": "1", "product_name": "高露洁牙膏", "product_desc": "高效美白", "category_id": "2", "category_name": "日化用品" }浏览器
Index:索引,包含一堆有类似结构的文档数据,好比能够有一个客户索引,商品分类索引等,索引有一个名称。一个index包含不少document,一个index就表明了一类相似的或者相同的document。好比说创建一个product index,商品索引,里面可能就存放了全部的商品数据(全部的商品document)。bash
Type:类型,每一个索引里均可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field,好比博客系统,有一个索引,能够定义用户数据type,博客数据type,评论数据type。服务器
shard:单台机器没法存储大量数据,es能够将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就能够横向扩展,存储更多数据,让搜索和分析等操做分布到多台服务器上去执行,提高吞吐量和性能。每一个shard都是一个lucene index。数据结构
replica:任何一个服务器随时可能故障或宕机,此时shard可能就会丢失,所以能够为每一个shard建立多个replica副本。replica能够在shard故障时提供备用服务,保证数据不丢失,多个replica还能够提高搜索操做的吞吐量和性能。运维
为了快速安装elasticsearch的环境,采用docker-compose
来安装。本次安装ealsticsearch集群为双节点,为了查询方便,安装kibina。完整脚本以下:
version: '2.2'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
container_name: es01
environment:
- node.name=es01
- discovery.seed_hosts=es02
- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- esnet
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.3.0
container_name: es02
environment:
- node.name=es02
- discovery.seed_hosts=es01
- cluster.initial_master_nodes=es01,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata02:/usr/share/elasticsearch/data
networks:
- esnet
kibana:
image: kibana:7.3.0
container_name: kibana
restart: always
depends_on:
- es01
environment:
SERVER_NAME: kibana
ELASTICSEARCH_HOSTS: http://es01:9200
#volumes:
# - ./kibana.yml:/usr/share/kibana/config/kibana.yml
ports:
- 5601:5601
networks:
- esnet
volumes:
esdata01:
driver: local
esdata02:
driver: local
networks:
esnet:
复制代码
执行docker-compose up
启动,本地访问curl http://localhost:9200
,能够获得以下结果:
在浏览器访问Kibina,默认地址为:http://localhost:5601,左侧点击进入Dev Tools界面。执行GET _cluster/health
来查看集群健康情况。
es提供了一套api,叫作cat api,能够查看es中各类各样的数据。
GET /_cat/health?v
(?v表明显示列头)
green:每一个索引的primary shard和replica shard都是active状态的 yellow:每一个索引的primary shard都是active状态的,可是部分replica shard处于不可用的状态 red:不是全部索引的primary shard都是active状态的,部分索引有数据丢失了
GET /_cat/indices?v
PUT /test_index?pretty
执行后查询索引:
DELETE /test_index?pretty
PUT /index/type/id
{
"json数据"
}
复制代码
es会自动创建index和type,不须要提早建立,并且es默认会对document每一个field都创建倒排索引,让其能够被搜索
PUT /ecommerce/product/1
{
"name" : "gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
PUT /ecommerce/product/2
{
"name" : "jiajieshi yagao",
"desc" : "youxiao fangzhu",
"price" : 25,
"producer" : "jiajieshi producer",
"tags": [ "fangzhu" ]
}
PUT /ecommerce/product/3
{
"name" : "zhonghua yagao",
"desc" : "caoben zhiwu",
"price" : 40,
"producer" : "zhonghua producer",
"tags": [ "qingxin" ]
}
复制代码
GET /ecommerce/product/1
复制代码
PUT /ecommerce/product/1
{
"name" : "jiaqiangban gaolujie yagao",
"desc" : "gaoxiao meibai",
"price" : 30,
"producer" : "gaolujie producer",
"tags": [ "meibai", "fangzhu" ]
}
复制代码
POST /ecommerce/product/1/_update
{
"doc": {
"name": "jiaqiangban gaolujie yagao"
}
}
复制代码
DELETE /ecommerce/product/1
复制代码