Elasticsearch学习笔记(1) -- 环境安装和简单CRUD

一、核心概念

  • 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,能够获得以下结果:

image-20190808171026876

在浏览器访问Kibina,默认地址为:http://localhost:5601,左侧点击进入Dev Tools界面。执行GET _cluster/health来查看集群健康情况。

image-20190808172540682

三、集群健康检查和简单操做索引

es提供了一套api,叫作cat api,能够查看es中各类各样的数据。

3.一、集群健康情况

GET /_cat/health?v(?v表明显示列头)

image-20190808172708184

​ green:每一个索引的primary shard和replica shard都是active状态的 ​ yellow:每一个索引的primary shard都是active状态的,可是部分replica shard处于不可用的状态 ​ red:不是全部索引的primary shard都是active状态的,部分索引有数据丢失了

3.二、查询索引

GET /_cat/indices?v

image-20190808172940215

3.三、建立索引

PUT /test_index?pretty

image-20190808173755758

执行后查询索引:

image-20190808173834279

3.四、删除索引

DELETE /test_index?pretty

image-20190808173942552

  • 执行后查询索引:

image-20190808173249504

四、商品的CRUD操做

4.一、新增商品

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" ]
}
复制代码

4.二、获取商品

GET /ecommerce/product/1
复制代码

4.三、更新商品

4.3.一、全量更新

PUT /ecommerce/product/1
{
    "name" : "jiaqiangban gaolujie yagao",
    "desc" :  "gaoxiao meibai",
    "price" :  30,
    "producer" :      "gaolujie producer",
    "tags": [ "meibai", "fangzhu" ]
}
复制代码

4.3.二、部分更新

POST /ecommerce/product/1/_update
{
  "doc": {
    "name": "jiaqiangban gaolujie yagao"
  }
}
复制代码

4.四、删除商品

DELETE /ecommerce/product/1
复制代码
相关文章
相关标签/搜索