elasticsearch6实战教程学习笔记(一) -- 基础


笔记来源 → B站学习视频:最新ElasticSearch6实战教程。 

视频评论里有人说是照本宣科,学到最后只会ctrl+c。我看了几篇,也有这种感觉。后来自己找了点文字资料,中文的资料零零散散,读英文文献我又不行,而且存在理解上的歧义。折腾一番后,我还是决定跟着视频一步一步的学。

以下笔记是本人看视频过程中的手打总结,前面基础内容使用的是抽象的参数名称,使用的时候请自行修改。笔记编号是根据视频编号标记的。笔记顺序根据内容有微调。

我第一次是在win10上安装的,视频介绍的是虚拟机的安装,所以这一部分没有写笔记。需要学习安装的可以自行在网上搜索。后来,我又在linux上安装了一次,遇到很多问题,有缘的话后续补上。

另外,es6+系列和es7+系列有很多区别,未来有机会再研究8。

目录

1. es的概述 + 22.23. 集群分片的tips

1. 什么是mapping?

2.  restful风格

12. 36. bulk批量操作 + 格式解析

* 一个小实例


1. es的概述 + 22.23. 集群分片的tips

es内的存储主要由以下部分组成。mapping相当于index的设置,包含doc的详细信息,比如type、field。约等于数据库里字段的详情。mapping的基本介绍在视频14。

 类比 /index /type /document
es 索引 类型 文档
数据库 database/库 table/表 一条数据

* 视频中的primary shard就是指的分片。replica指的是分片的副本。

* 集群分片的tips

分片 primary shard 和副本 replica shard 不能在同一个节点上,相同的副本也不能在同一个节点上。

若只有一个节点,则无法创建副本,集群状态为yellow(亚健康)。

 集群中增加节点时,es会自动创建之前未分配的replca shard。

(1)指定分片

PUT /mauanx
{
    "settings":{
        // 分片数
        "number_of_shards":3,
        // 每个分片的副本数
        "number_of_replicas":1 
    }
}

(2)查看集群状态

GET _cat/health
// green (健康
// yellow(亚健康
// red   (不健康

* 关于es的分片问题可以参考:Elasticsearch之如何合理分配索引分片

* 其他关于es的基础介绍, 可以参考:Elasticsearch学习,请先看这一篇


1. 什么是mapping?

ES6+的mapping可以设置属性,格式为 "属性" : "属性值" ,支持的几个常用属性如下:

1

"store"

:

false(默认)-- 没有存储,只能搜索,不能获取值。

true -- 因存储而从_source字段中分离,可搜索并获取值。

2

"index"

:

false -- 不分词。

 true -- 分词。

3

"analyzer"

:

 "ik" -- 指定分词器,默认为:standard analyzer。

4

"boost"

:

1.23 -- 字段级别的分数加权,默认为:1.0。

5

"ignore_above"

:

100 -- 超过100个字符的文本将会被忽略,不被索引。

6

"search_analyzer"

:

"ik" -- 搜索时使用的分词器,默认为:standard analyzer。


2.  restful风格

es6使用的就是restful风格,总结一下就是下面这张表。

http请求 get post put delete
curd动作

 这里随便贴一篇文章供新手参考:使用RESTful风格开发Java Web


12. 36. bulk批量操作 + 格式解析

(1)bulk的格式

语句分为 两行,第一行放指令, 第二行放数据。

{action:{metadata}}
{requestbody}

其中:

action(行为)

① create:文档不存在时创建文档;文档存在时操作失败,提示文档已存在。

② update:更新文档。

③ index:创建新文档或替换已有文档,与create相比,文档存在时直接修改,不会有提示。

④ delete:删除一个文档。

metadata(元数据)

元数据可指定_index, _type, _id,也可在http请求中指明。

json格式:耗费内存,需要转换成响应的对象,操作复杂。

bulk现有格式,分割简单,可以减小java虚拟机的开销。

(2)批量操作

添加

POST /index/type/_bulk
{"index":{"_index":"索引值","_type":"类型值","_id":"id值"}}
{"属性1":"属性值1","属性2":"属性值2"}

"errors":

false -- 添加成功

true -- 添加失败

POST /index/type/_bulk
{"create":{"_index":"索引值","_type":"类型值","_id":"id值"}}
{"属性1":"属性值1","属性2":"属性值2"} 
 
获取

 

GET /index/type/_mget
{"ids":["id值1",...,"id值n"]}
 
修改

POST /index/type/_bulk
{"index":{"_index":"lib","_type":"user","_id":"1"}}
{"属性1":"属性值1","属性2":"属性值2"}
 
POST /index/type/_bulk
{"update":{"_index":"lib","_type":"user","_id":"1"}}
{"属性1":"属性值1","属性2":"属性值2"}
 

删除

POST /index/type/_bulk
{"delete":{"_index":"索引值","_type":"类型值","_id":"id值"}}
 

增删改可放在同一个http请求下一起执行。

// 增、改、删
POST /index/type/_bulk
{"create":{"_index":"索引值","_type":"类型值","_id":"id值"}}
{"属性1":"属性值1","属性2":"属性值2"} 
{"index":{"_index":"索引值","_type":"类型值","_id":"id值"}}
{"属性1":"属性值1","属性2":"属性值2"}
{"delete":{"_index":"索引值","_type":"类型值","_id":"id值"}}

 

 


* 一个小实例

(1) 创建索引、类型

① 可以用head工具创建:

elasticsearch6实战教程学习笔记(一) -- 基础_第1张图片

② 使用kibana创建index、mapping、type:

index为mauanx,type为user(es5以下的版本中,一个indexe中可以有多个type;s6中一个index只有一个type,为过渡阶段;到es7时已经取消了type。),id我手写的1-6。

_source包括四个:①name:姓名(文本);②age:年龄(数值)③sex:性别(文本)④interests:兴趣(后续我存放的是文本数组)。

// 创建索引
PUT mauanx

// 创建索引的mapping、type为user
PUT /mauanx/_mapping/user
{
  "properties": {
    "name": {
      "type": "text"
    },
    "age": {
       "type": "integer"
    },
    "sex":{
       "type": "text"
    }
    "interests":{
       "type": "text"
    }
  }
}

或者:

PUT /mauanx // 创建索引mauanx、type为user
{
  "settings":{
    // 5个分片
    "number_of_shards":5, 
    // 1个副本
    "number_of_replicas":1 
  },
  "mappings":{
    "user":{
      "properties":{
        "name": {
          "type": "text"
        },
        "age": {
           "type": "integer"
        },
        "sex":{
           "type": "text"
        }
        "interests":{
           "type": "text"
        }
      }
    }
  }
}

(2)批量插入数据:

在索引mauanx、类型为user 下插入6条数据。

POST /mauanx/user/_bulk
{"create":{"_index":"mauanx","_type":"user","_id":1}}
{"name":"Abbey","age":20,"sex":"female","interests":["sing","draw"]}
{"create":{"_index":"mauanx","_type":"user","_id":2}}
{"name":"Barbara","age":21,"sex":"female","interests":["climb trees","draw"]}
{"create":{"_index":"mauanx","_type":"user","_id":3}}
{"name":"Cindy","age":22,"sex":"female","interests":["sleep","draw"]}
{"create":{"_index":"mauanx","_type":"user","_id":4}}
{"name":"Daisy","age":19,"sex":"female","interests":["play games","draw"]}
{"create":{"_index":"mauanx","_type":"user","_id":5}}
{"name":"Ella","age":20,"sex":"female","interests":["sing","cook"]}
{"create":{"_index":"mauanx","_type":"user","_id":6}}
{"name":"Fitch","age":23,"sex":"male","interests":["sing","play ball"]}

 

你可能感兴趣的:(elasticsearch,elasticsearch)