Elasticsearch的RESTful API

目录

    • 前言
    • curl命令
    • Elasticsearch的RESTful API
    • 结尾语

前言

我们操作Elasticsearch 是通过它提供的REST API来进行的,我们可以用web客户端(POST MAN等)或者curl命令来与Elasticsearch 进行交互

Elasticsearch 的REST请求和响应的内容基本都是JSON格式的

官方的API文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html


curl命令

下面简单介绍下curl命令的用法

curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。

不带有任何参数时,curl 就是发出 GET 请求。

例:

curl www.baidu.com

相当于向www.baidu.com发出 GET 请求,服务器返回的内容会在命令行输出。

-X:-X参数指定 HTTP 请求的方法。

curl -X POST www.baidu.com

-H
-H参数添加 HTTP 请求的标头。

例:我们想发送json格式的数据时,就需要指定请求的Content-Type为 application/json,如下

 curl -d '{"name": "xxx", "pass": "123"}' -H 'Content-Type: application/json' https://www.baidu.com

-d:-d参数用于发送 POST 请求的数据体。

例:

curl  https://www.baidu.com/ -d 'name=xxx&password=xxx'

使用-d参数以后,HTTP 请求会自动加上标头Content-Type : application/x-www-form-urlencoded。并且会自动将请求转为 POST 方法,因此可以省略-X POST。

-o:-o参数将服务器的回应保存成文件,等同于wget命令,-o后为我们定义的文件名,即我们下载的文件保存的文件名

例:

curl -o baidu.html  https://www.baidu.com

-O:-O参数将服务器回应保存成文件,并将 URL 的最后部分当作文件名。

例:

curl -O https://www.baidu.com/baidu.html

Elasticsearch的RESTful API

1、查看Elasticsearch 系统的基本信息

想要查看Elasticsearch 系统的基本信息,只需要访问http://ip:9200 即可,返回的是本节点(ES实例的)name,以及ES集群的一些基本信息,如集群名,版本信息等。

如:

//本地ES系统信息
 http://localhost:9200
或者
curl http://localhost:9200

以下为我本地ES的基本信息

{
  "name" : "WJjbQcr",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "FL0-U6IPTESykqutT1Lt4A",
  "version" : {
    "number" : "6.2.2",
    "build_hash" : "10b1edd",
    "build_date" : "2018-02-16T19:01:30.685723Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"

2、查看集群健康信息

curl -X GET "localhost:9200/_cat/health?v"

该指令会返回集群名称,状态,节点数,分片数等。其中状态有green、yellow和red,green表示正常。yellow表示集群所有数据都是可用的,集群功能也齐全,不过某些复制没有被分配。

在这里插入图片描述
3、查看节点的详细信息

curl -X GET "localhost:9200/_cat/nodes?v"

该指令会返回节点的名称,节点ip,是否为主节点(主节点的master会显示为*)

请求结果如下:

在这里插入图片描述
4、查看所有索引

指令如下:

curl -X GET "localhost:9200/_cat/indices?v"

如果返回:health status index uuid pri rep docs.count docs.deleted store.size pri.store.size,表示当前集群没有索引

5、创建一个索引

指令如下,使用的请求方式为PUT,然后在ip地址后填写我们想创建的索引的名称,即会创建相应名称的索引

例:

curl -X PUT "localhost:9200/test"

创建成功会给我们返回响应,响应结果有index名称,响应标识,true为成功

以下为我创建一个名为test的索引返回的结果

E:\soft\elasticsearch-6.2.2\bin>curl -X PUT "localhost:9200/test"
{"acknowledged":true,"shards_acknowledged":true,"index":"test"}

如果我们想更直观的查看响应的结果,那么我们可以在指令地址后面加上pretty参数,这样响应的结果就会以json格式输出

例:

curl -X PUT "localhost:9200/test?pretty"

mapping是类似于数据库中的表结构定义,主要作用如下:

定义index下的字段名
定义字段类型,比如数值型、浮点型、布尔型等
定义倒排索引相关的设置,比如是否索引、记录position等

我们可以在创建索引的时候设置mapping

比如

PUT localhost:9200/my_index
{
  "mappings": {
    "doc": {
      "dynamic": false,
      "properties": {
        "title": {
          "type": "text"
        }
      }
    }
  }
}

注:mappings的下一层为类型的名称,如上面的例子则表示在doc类型下创建一个类型为text的字段

6、删除索引

指令如下,使用的请求方式为DELETE ,然后在ip地址后填写我们想删除的索引的名称,即会删除相应名称的索引

curl -X DELETE "localhost:9200/test?pretty"

结果

E:\soft\elasticsearch-6.2.2\bin>curl -X DELETE "localhost:9200/test?pretty"
{
  "acknowledged" : true
}

7、添加文档

例:

在postman发送请求

以下请求表示在索引test中的test_type类型中添加一个文档,文档id为1,json中为文档内容

我们也可以不指定ID,不指定ID的话,ES会帮我们生成一个ID,自动生成的id,长度为20个字符,URL安全,base64编码,GUID,分布式系统并行生成时不可能会发生冲突。不指定ID需要使用POST请求,当然指定ID也可以使用POST请求。

Elasticsearch的RESTful API_第1张图片

返回结果:

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

注:es中创建后的mapping不可修改

8、查看文档

查看文档只需要使用GET请求去请求ip地址加上我们的索引名称,类型,文档id即可

E:\soft\elasticsearch-6.2.2\bin>curl -X GET "localhost:9200/test/test_type/1?pretty"
{
  "_index" : "test",
  "_type" : "test_type",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "user" : "m"
  }
}

文档主要属性:
_index:文档所在的索引
_type:文档所在的类型
_id:文档的ID,唯一标识

如果我们想查看索引中的相关属性,那么直接GET请求ip地址加索引名称即可,它会返回索引的aliases属性、mapping属性和settings属性

curl -X GET "localhost:9200/test?pretty"

返回结果:

{
  "test" : {
    "aliases" : { },
    "mappings" : {
      "test_type" : {
        "properties" : {
          "age" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "user" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1600854236811",
        "number_of_shards" : "5",
        "number_of_replicas" : "1",
        "uuid" : "uHWQNne2T0aHT4k32_mzVw",
        "version" : {
          "created" : "6020299"
        },
        "provided_name" : "test"
      }
    }
  }
}

9、删除文档

删除使用DELETE请求即可,下面为删除id为2的文档,使用DELETE请求,我们不仅可以删除文档,还可以删除整个type乃至整个索引

#删除id为2的文档
curl -XDELETE “localhost:9200/test/test_type/2”

#删除索引
curl -XDELETE “localhost:9200/test”

10、全文搜索

搜索方法为_search

我们可以在url的ES类型后加上_search,这样就会返回该类型下的所有数据

curl -XGET "localhost:9200/test/test_type/_search?pretty"

_search还支持很多种搜索方式,我们使用querystring语法进行搜索

例:搜索包含m的数据

curl -XGET "localhost:9200/test/test_type/_search?pretty&q=m"

querystring语法(上例中,?q=后面写的就是querystring语法):
全文检索:直接写搜索的单词,例如加上例中的m
单字段的全文检索:在搜索单词前加上字段名和冒号,比如,如果知道单词m肯定出现在user字段,可以写作user:m
单字段的精确检索:在搜索单词前后加上双引号,比如user:“fjc”
多个检索条件的组合:可以使用NOT、AND和OR来组合检索,注意必须是大写
字段是否存在:exists:user表示要求user字段存在,missing:user表示要求user字段不存在
通配符:用?表示单字母,*表示任意个字母
近似搜索:用表示搜索单词可能有一两个字母写得不对,请Elasticsearch按照相似度返回结果。比如test
范围搜索:对数值和时间,Elasticsearch都可以使用范围搜索,比如:rtt>300、date:[“now-6h” TO “now”}等。其中,[]表示端点数值包含在范围内,{}表示端点数值不包含在范围内

11、更新文档数据

更新某个文档使用_update方法

发送的json数据为

{
“doc”:{
           “字段”:”新的数据”
           }
}

例:

POST test/type1/1/_update
{
    "doc" : {
        "name" : "new_name"
    }
}

除了修改旧字段的值外,我们还可以在doc中添加新的字段
Elasticsearch的RESTful API_第2张图片

需要注意的是,Elasticsearch底层并不支持更新操作,所谓的更新,是将旧的文档删除,然后索引一个新的文档。

除了使用doc来更新文档,我们还可以使用一些脚本来更新文档

{	
  "script" : "ctx._source.user= mm"	
}

ctx._source表示当前被更新的文档,后面跟的是更新的字段,然后将新值赋给字段

POST test/type1/1/_update
{
    "script" : {
       "script" : "ctx._source.user= mm"	
    }
}

12、查看插件信息

使用GET请求访问/_cat/plugins?v,可以查看ES中的插件信息

curl -XGET "localhost:9200/_cat/plugins?v"

13、查看mapping信息

语法:GET 索引名/_mapping

GET test/_mapping

14、添加mapping

mapping的添加使用_mapping方法

POST 索引名/类型名/_mapping
{
     mapping内容
}

注:类型名可有可无,在url指定了类型,则在mapping内容不需要显式写类型名

例:

POST test_index/test_type/_mapping
{
  
    "test_type": {
      "dynamic": false,
      "properties": {
        "name": {
          "type": "text"
        },
        "address": {
          "type": "text"
        }
}

注:因为我们在url中指定了类型,所以内容中的test_type是可以不写的


结尾语

Elasticsearch的RESTful API还有很多,这里不能一个一个列举了,大家需要了解更多看官方文档即可

你可能感兴趣的:(ES,elasticsearch,数据库)