本接你能学到什么?

  1. Elasticsearch节点信息的操作
  2. 索引的创建、查询、删除
  3. 文档的创建、查询、修改、删除

官网对Elasticsearch的介绍有一条是:分布式、RESTFul风格的搜索和分析,这就说明我们可以通过RESTFul风格接口请求获取数据及信息,使用postman工具即可模拟对应的接口请求

初步检索

1、_cat 协助我们查看节点信息

GET /_cat/nodes 查看所有节点

GET /_cat/health 查看es健康状况

GET /_cat/master 查看主节点

GET /_cat/indices 查看所有索引(类似于mysql的show databases)

索引操作

1、创建索引

对比关系型数据库,创意索引约等于创建数据库

PUT请求 服务器ip:端口/索引名称

例: PUT请求

{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "customer"
}

如上图中返回数据含义:

acknowledged返回true表示创建成功

index表示我们的索引名称

shards_acknowledged有没有足够的空间分配

注意:因为put操作保证了幂等性,所以当索引存在的时候,在新增便会提示已存在。

2、查看索引

查看刚刚创建的索引也相对比较简单,就是将上面创建索引的PUT请求更换成GET请求即可

例: GET请求 

{
    "customer": {
        "aliases": {},
        "mappings": {},
        "settings": {
            "index": {
                "routing": {
                    "allocation": {
                        "include": {
                            "_tier_preference": "data_content"
                        }
                    }
                },
                "number_of_shards": "1",
                "provided_name": "customer",
                "creation_date": "1668756661340",
                "number_of_replicas": "1",
                "uuid": "w-egUMVFSZqB4kYoWHlbEA",
                "version": {
                    "created": "7120199"
                }
            }
        }
    }
}

3、删除索引

删除刚刚创建的索引也相对比较简单,就是将上面创建索引的PUT请求更换成DELETE请求即可

例: PUT请求

{
    "acknowledged": true
}

文档操作

1、创建文档

语法:PUT或POST请求 /索引名/类型/id

保存一个数据,保存在哪个索引的哪个类型下,指定用哪个唯一标识

翻译成mysql的意思:保存在哪个数据库的哪张表下,

在customer索引下的external类型下保存1号数据为:PUT请求 customer/external/1

同样POST操作也是能够保存的,POST请求 customer/external/1

{
    "_index": "customer",
    "_type": "external",
    "_id": "1",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}

PUT和POST的相同与不同:

相同点:

  1. 两者都支持对数据的保存和修改
    即:当put请求时,如果有数据,则更新;没有数据,则新增 当post请求时,如果携带了id,则修改;如果没有携带,则新增

不同点:

  1. PUT必须携带后面的id,POST可以不携带后面的id
    即:put请求如果不携带id则会报错405,不允许操作

2、更新文档

除了上面创建文档时可以根据id参数是否携带完成更新,我们还有常规的更新文档操作。

语法:POST 请求 /索引名/类型/id/_update

POST请求: customer/external/1/_update

从下方返回数据的result字段的返回值noop可以看出数据是没有做任何操作的;如果修改了,则_version会增加,result会更改为updated

{
    "_index": "customer",
    "_type": "external",
    "_id": "1",
    "_version": 1,
    "result": "noop",
    "_shards": {
        "total": 0,
        "successful": 0,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}

与创建文档修改的比较:

相同点:在更新值,新增字段时,都会完成正常的更新操作

不同点:_update修改的时候,会对比原来的数据,如果与原来一样,就什么都不会操作(version、seq_no全部不变的),
       而新增修改的时候,则不会比对,每次都会进行真正的修改

3、查询文档

语法;GET请求 /索引/类型/id

GET请求 /customer/external/1

{
    "_index": "customer",
    "_type": "external",
    "_id": "1",
    "_version": 3,
    "_seq_no": 2,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "doc": {
            "name": "sbdk1"
        }
    }
}

留个小小的问题:

我们看到返回结果中有_seq_no和_primary_term两个字段,是干什么用的?大家可查询一下, 有任何问题,欢迎在评论区留言交流

4、删除文档

语法:

DELETE请求 /索引名/类型/id

DELETE请求 /索引名

DELETE请求 /customer/external/1

{
    "_index": "customer",
    "_type": "external",
    "_id": "1",
    "_version": 4,
    "result": "deleted",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 3,
    "_primary_term": 1
}

总结

总体来说,索引与文档的基本操作没有多复杂,基本就是更改一下请求方式和请求内容即可完成。大家跟着文章多敲几遍即可学会。