文章目录
  1. 1. ElasticSearch入门
    1. 1.1. 基础概念
    2. 1.2. ElasticSearch基本用法
      1. 1.2.1. 索引创建
      2. 1.2.2. 插入
        1. 1.2.2.1. 指定文档id插入
        2. 1.2.2.2. 自动产生id插入
      3. 1.2.3. 修改
        1. 1.2.3.1. 直接修改文档
        2. 1.2.3.2. 通过脚本修改文档
      4. 1.2.4. 删除
        1. 1.2.4.1. 删除文档
        2. 1.2.4.2. 删除索引
      5. 1.2.5. 查询
        1. 1.2.5.1. 简单查询
        2. 1.2.5.2. 条件查询
        3. 1.2.5.3. 聚合查询

ElasticSearch入门

对ElasticSearch有一个基本的认识和使用

基础概念

  • 集群和节点
    一个集群包含多个节点,节点通过集群名称加入节点。就和我们安装es集群的时候,每一个节点都需要配置cluster.name 属性。
  • 索引
    含有相同属性文档的集合,索引格式:小写不能有中画线

  • 类型
    索引可以定义一个或多个类型,文档必须属于一个类型

  • 文档
    文档是可以被索引的基本单位

上面的概念可以类比于,索引就是database数据库,类型就是table表,文档就是record一行记录

  • 分片
    每个索引都有多个分片,每个分片是Lucene索引。分片的好处,当一个索引的数据两很大时,通过分片,可以缓解磁盘的压力
  • 备份
    拷贝一份分片就完成了分片的备份。备份的好处,提高可用性

es默认创建5个分片一份备份,分片的数量只能在创建索引的时候修改,备份的数量可以后期修改。

ElasticSearch基本用法

ES的API都是基于RESTFul API 风格命名,API基本格式:

http://<ip>:<port>/<索引>/<类型>/<文档id>

常用的HTTP动词:

GET/PUT/POST/DELETE

索引创建

  • 通过head插件创建索引,具体如

    通过head创建索引步骤1

    通过head创建索引步骤2

通过head创建索引步骤3

  • 使用JSON的形式创建

    使用Postman工具,具体如下

    通过PUT方式请求http://192.168.137.3:9200/people接口

    Postma请求创建索引

输入以下信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
"setting":{
"number_of_shards":3, // 分片数
"number_of_replicas":1 // 副本数
},
"mappings":{ //映射
"man":{ // 索引值
"properties":{ // 索引属性
"name":{
"type":"text" // 索引属性类型
},
"country":{
"type":"keyword"
},
"age":{
"type":"integer"
},
"date":{
"type":"date",
"format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
},
"woman":{
}
}
}

插入

指定文档id插入

使用Post man工具使用PUT请求url:http://192.168.137.3:9200/people/man/1,URL详解如下:

指定id插入url详解

请求body如下,和我们创建的类型字段一致:

1
2
3
4
5
6
{
"name":"knight",
"country":"China",
"age":26,
"date":"1991-12-1"
}

成功响应结果如下:

指定id插入响应结果

通过elasticsearch-head工具也能看到插入数据成功:

指定id插入es-head响应结果

刷新页面docs变为1表示插入一条文档成功,或者进入数据浏览tab也能看到刚才添加的数据,如下图:

指定id插入es-head数据浏览响应结果

自动产生id插入

同样使用Post man插入,通过POST请求方式请求http://192.168.137.3:9200/people/man/ 这里无需指定文档id了

自动产生id插入请求方式

响应结果如下:

自动产生id方式请求结果

通过elastic-head工具查看,刷新页面

自动产生id方式es-head结果

自动产生id方式es-head结果2

通过上面结果可以看出id是自动生成的

修改

分为如下两种方式:

直接修改文档

通过Post man请求相应的URL进行修改,通过POST方式请求http://192.168.137.3:9200/people/man/1/_update

直接修改url说明

请求方式如下:

直接修改请求方式

响应结果如下:

直接修改请求方式-响应结果

es-head结果:

直接修改请求方式-eshead结果

修改成功

通过脚本修改文档

同样使用Post man工具进行修改,请求url和方式不变http://192.168.137.3:9200/people/man/1/_update,请求方式如下:

脚本修改请求方式

解释一下请求json:

1
2
3
script=表示使用脚本
lang=表示使用什么脚本语言,这里使用es自带的painless
inline=表示正文,ctx表示es的上下文,获取文档的age属性加10后再赋值给age

还可以通过以下方式修改:

脚本修改请求方式2

响应结果如下:

脚本修改响应结果

es-head响应结果:

脚本修改数据es-head结果

删除

分为如下两种方式

删除文档

使用Post man工具使用DELETE方式请求urlhttp://192.168.137.3:9200/people/man/1,如下:

删除-删除文档

es-head结果:

删除-删除文档es-head结果

刚才的id为1的结果已经不存在

删除索引
  • 通过es-head删除

    进入es-head页面,点击“概述”tab页,我们选择people索引进行删除,如下

    删除-通过es-head删除索引

    点击确认按钮,将会删除该索引和该索引下的所有数据

    通过es-head删除索引成功

    刷新es-head该索引消失

  • 通过API的方式删除

    进入Post man工具,通过DELETE方式请求http://192.168.137.3:9200/book URL,如下:

    通过API删除索引

刷新es-head该索引消失

查询

录入以下数据

查询的基础数据

简单查询

通过API的方式查询,进入Postman工具通过POST方式请求http://192.168.137.3:9200/book/novel/1 ,结果如下:

简单查询

条件查询
  • 查询所有结果

    使用Postman工具通过POST方式请求http://192.168.137.3:9200/book/_search ,输入以下查询条件:

    1
    2
    3
    4
    5
    {
    "query":{
    "match_all": {}
    }
    }

    响应结果如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    {
    "took": 9,
    "timed_out": false,
    "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
    },
    "hits": {
    "total": 11,
    "max_score": 1,
    "hits": [
    {
    "_index": "book",
    "_type": "novel",
    "_id": "5",
    "_score": 1,
    "_source": {
    "word_count": 5000,
    "author": "王五",
    "title": "菜谱",
    "publish_date": "2002-10-01"
    }
    },
    {
    "_index": "book",
    "_type": "novel",
    "_id": "8",
    "_score": 1,
    "_source": {
    "word_count": 3000,
    "author": "瓦力",
    "title": "ElasticSearch入门",
    "publish_date": "2017-08-25"
    }
    },
    {
    "_index": "book",
    "_type": "novel",
    "_id": "9",
    "_score": 1,
    "_source": {
    "word_count": 3000,
    "author": "很胖的瓦力",
    "title": "ElasticSearch精通",
    "publish_date": "2017-08-15"
    }
    }
    }
    ]
    }
    }

    took表示查询所花的时间

    hits表示查询的结果,默认显示10条记录,这里为了显示,删除了一些结果

  • 分页查询

    URL不变,请求方式不变,修改请求参数如下:

    1
    2
    3
    4
    5
    6
    7
    {
    "query":{
    "match_all": {}
    },
    "from" : 1,
    "size" : 1
    }

    from表示开始位置

    size表示显示条数

  • 关键字查询

    URL不变,请求方式不变,修改请求参数如下:

    查询title包含ElasticSearch

    1
    2
    3
    4
    5
    6
    7
    {
    "query":{
    "match": {
    "title":"ElasticSearch"
    }
    }
    }

    结果默认按照_score倒序排列

    修改排序规则

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    {
    "query":{
    "match": {
    "title":"ElasticSearch"
    }
    },
    "sort" :[
    {"publish_date":
    {"order":"desc"}
    }
    ]
    }

聚合查询

请求的URL和请求方式和上面一样,具体如下:

1
2
3
4
5
6
7
8
9
{
"aggs" : {
"group_by_word_count" : {
"terms" : {
"field" : "word_count"
}
}
}
}

通过字段word_count进行分组,具体结果如下,下面是部分结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
"aggregations": {
"group_by_word_count": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 1000,
"doc_count": 5
},
{
"key": 2000,
"doc_count": 2
},
{
"key": 3000,
"doc_count": 2
},
{
"key": 5000,
"doc_count": 1
},
{
"key": 10000,
"doc_count": 1
}
]
}
}
文章目录
  1. 1. ElasticSearch入门
    1. 1.1. 基础概念
    2. 1.2. ElasticSearch基本用法
      1. 1.2.1. 索引创建
      2. 1.2.2. 插入
        1. 1.2.2.1. 指定文档id插入
        2. 1.2.2.2. 自动产生id插入
      3. 1.2.3. 修改
        1. 1.2.3.1. 直接修改文档
        2. 1.2.3.2. 通过脚本修改文档
      4. 1.2.4. 删除
        1. 1.2.4.1. 删除文档
        2. 1.2.4.2. 删除索引
      5. 1.2.5. 查询
        1. 1.2.5.1. 简单查询
        2. 1.2.5.2. 条件查询
        3. 1.2.5.3. 聚合查询