Elasticsearch涉及的RESTful API

所有其他语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信,你可以使用WEB客户端或者curl命令来和ES交互。下面介绍用curl命令来交互的具体用法:

一、格式

curl -X<VERB> ‘<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>‘ -d ‘<BODY>‘

被 < > 标记的部件含义:
VERB
适当的 HTTP 方法 或 谓词 : GET、 POST、 PUT、 HEAD 或者 DELETE。

PROTOCOL
http 或者 https(如果你在 Elasticsearch 前面有一个 https 代理)

HOST
Elasticsearch 集群中任意节点的主机名,或者用 localhost 代表本地机器上的节点。

PORT
运行 Elasticsearch HTTP 服务的端口号,默认是 9200 。

PATH
API 的终端路径(例如 _count 将返回集群中文档数量)。Path 可能包含多个组件,例如:_cluster/stats 和 _nodes/stats/jvm 。

QUERY_STRING
任意可选的查询字符串参数 (例如 ?pretty 将格式化地输出 JSON 返回值,使其更容易阅读)

BODY
一个 JSON 格式的请求体 (如果请求需要的话)

二、API类型

1.数据写入(POST)

往本地ES中写入一条数据,索引名称为"test_log-2018-10-24",类型名称为"test_log":

curl -XPOST http://127.0.0.1:9200/test_log-2018-10-24/test_log -d ‘{
    "date":"1540369436",
    "user":"test",
    "mesg":"this is a test message"
    }‘
#返回:
{"_index":"test_log-2018-10-24","_type":"test_log","_id":"AWalLVzvZ_iZW0h4u8UH","_version":1,"result":"created","_shards":{"total":1,"successful":1,"failed":0},"created":true}

2.数据获取(GET)

从本地ES中获取一条数据,索引名称为"test_log-2018-10-24",类型名称为"test_log",id名称为"AWalLVzvZ_iZW0h4u8UH":

curl -XGET http://127.0.0.1:9200/test_log-2018-10-24/test_log/AWalLVzvZ_iZW0h4u8UH
#返回
{"_index":"test_log-2018-10-24","_type":"test_log","_id":"AWalLVzvZ_iZW0h4u8UH","_version":1,    "found":true,"_source":{
"date":"1540369436",
"user":"test",
"mesg":"this is a test message"
}}

3.数据删除(DELETE)

删除刚才插入的数据:

curl -XDELETE http://127.0.0.1:9200/test_log-2018-10-24/test_log/AWalLVzvZ_iZW0h4u8UH
#返回
{"found":true,"_index":"test_log-2018-10-24","_type":"test_log","_id":"AWalLVzvZ_iZW0h4u8UH","_version":2,"result":"deleted","_shards":{"total":1,"successful":1,"failed":0}}

注意:删除数据,不但针对单条数据,还可以使用通配符删除整个type乃至整个索引
例如:

curl -XDELETE ‘http://127.0.0.1:9200/*-${DATA}‘

三、常用API

1._update

局部更新

curl -XPOST ‘http://127.0.0.1:9200/test_log-2018-10-24/test_log/AWalXZ4cZ_iZW0h4vlQj/_update‘ -d ‘{
"doc":{
"user":"fjc"
}
}‘
#返回
{"_index":"test_log-2018-10-24","_type":"test_log","_id":"AWalXZ4cZ_iZW0h4vlQj","_version":2,"result":"updated","_shards":{"total":1,"successful":1,"failed":0}}

2._search

全文搜索

curl -XGET http://127.0.0.1:9200/test_log-2018-10-24/test_log/_search?q=test
curl -XGET http://127.0.0.1:9200/test_log-2018-10-24/test_log/_search?q=mesg:test

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

3._cluster

获取集群健康状态

curl -XGET ‘http://127.0.0.1:9200/_cluster/health?pretty‘
Enter host password for user ‘logview‘:
{
  "cluster_name" : "idca-elk",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 141,
  "active_shards" : 277,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

获取节点状态

curl -XGET ‘http://127.0.0.1:9200/_cluster/state/nodes?pretty‘
Enter host password for user ‘logview‘:
{
  "cluster_name" : "idca-elk",
  "nodes" : {
    "xSTX8HulT7eLrHtx8dpVbg" : {
      "name" : "elk02",
      "ephemeral_id" : "iql7vwvBSWSyx7PrsUMAGg",
      "transport_address" : "172.16.1.26:9300",
      "attributes" : { }
    },
    "gvlGkHa9QcyIsz31PjyZaw" : {
      "name" : "elk03",
      "ephemeral_id" : "9Gxyu9XrSSGNIPWKDAsfpw",
      "transport_address" : "172.16.1.27:9300",
      "attributes" : { }
    },
    "GVf_Yo-9RBW9_oUrqIPOZw" : {
      "name" : "elk01",
      "ephemeral_id" : "ZjAUQHGYS0KUMT1iiGS4Jg",
      "transport_address" : "172.16.1.25:9300",
      "attributes" : { }
    }
  }
}

获取主节点状态

Enter host password for user ‘logview‘:
{
  "cluster_name" : "idca-elk",
  "master_node" : "GVf_Yo-9RBW9_oUrqIPOZw"
}

显示集群的详细信息

curl -XGET ‘http://127.0.0.1:9200/_cluster/stats?human&pretty‘ 

4._cat

查看主节点

curl -XGET ‘http://127.0.0.1:9200/_cat/master?pretty&v‘
Enter host password for user ‘logview‘:
id                     host        ip          node
GVf_Yo-9RBW9_oUrqIPOZw 172.16.1.25 172.16.1.25 elk01

查看所有索引

curl -XGET ‘http://127.0.0.1:9200/_cat/indices?v‘
health status index                 uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   apache-2018-10-26     bksy7QOCQQyHcBazjB5TEg   5   1     443452            0    259.4mb        129.7mb
green  open   user_audit-2018-10-26 41PM-4WpRJ6Evhar0dREsA   5   1         95            0    575.2kb        287.6kb
green  open   domain_log-2018-10-24 d8zG7XL3RtyvyqAIJp7GvQ   5   1   11307735            0     11.4gb          5.7gb

查看单节点健康状态

curl -XGET ‘http://127.0.0.1:9200/_cat/health?v‘
epoch      timestamp cluster  status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1540530477 13:07:57  idca-elk green           3         3    277 141    0    0        0             0                  -                100.0%

查看分片信息

curl -XGET ‘http://127.0.0.1:9200/_cat/shards?v‘
index                 shard prirep state      docs   store ip          node
domain_log-2018-10-22 3     r      STARTED 1975611     1gb 172.16.1.27 elk03
domain_log-2018-10-22 3     p      STARTED 1975611     1gb 172.16.1.25 elk01
domain_log-2018-10-22 2     p      STARTED 1979052     1gb 172.16.1.26 elk02

查看插件信息

curl -XGET ‘http://127.0.0.1:9200/_cat/plugins?v

原文地址:http://blog.51cto.com/fengjicheng/2348019

时间: 2024-08-29 08:11:47

Elasticsearch涉及的RESTful API的相关文章

Elasticsearch RESTful API请求详解

可以使用行命令 curl 通过9200端口与 Elasticsearch 的 RESTful API 进行通信.   Elasticsearch RESTful API规范 例如,计算集群中文件的数量,我们就可以使用:       <1>     <2>                   <3>    <4> curl -XGET 'http://localhost:9200/_count?pretty' -d ' {  <5>     &qu

通过HTTP RESTful API 操作elasticsearch搜索数据

通过HTTP RESTful API 操作elasticsearch搜索数据

DICOM医学图像处理:深入剖析Orthanc的SQLite,了解WADO &amp; RESTful API

背景: 上一篇博文简单翻译了Orthanc官网给出的CodeProject上"利用Orthanc Plugin SDK开发WADO插件"的博文,其中提到了Orthanc从0.8.0版本之后支持快速查询,而原本的WADO请求需要是直接借助于Orthanc内部的REST API逐级定位.那么为什么之前的Orthanc必须要逐级来定位WADO请求的Instance呢?新版本中又是如何进行改进的呢?此篇博文通过分析Orthanc内嵌的SQLite数据库,来剖析Orthanc的RESTful A

RESTful API 设计最佳实践(转)

摘要:目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API格式如何?你的API是否应该加入版本信息? 背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API格式如何?你的API是否应该加入版本信息?当你开始写一个app的时候,特别是后端模型部分已经写完

HTTP methods 与 RESTful API

目录: RESTful 是什么 JSON-server (提供 RESTful API 接口 + JSON 返回数据) 如何选择 REST 方法 HTTP verbs / method (安全 | 幂等) HTTP POST V.S. PUT REST POST | PUT | PATCH RESTful 是什么 阮一峰:理解RESTful架构 Representational State Transfer 表征状态转移 核心:resource.representation 指的是 resour

RESTful API 设计最佳实践

1. 背景 REST(英文:Representational State Transfer,表述性状态转移)描述了一个架构样式的网络系统,比如 web 应用程序. 目前互联网上充斥着大量的关于RESTful API(为方便,下文中"RESTful API "简写为"API")如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API 格式如何?你的API是否应该加入版本信息?当你开始写一个app的时候,特别是后端模型部分已经写完的时候,你

[转]10个有关RESTful API良好设计的最佳实践

Web API已经在最近几年变成重要的话题,一个干净的API设计对于后端系统是非常重要的. 通常我们为Web API使用RESTful设计,REST概念分离了API结构和逻辑资源,通过Http方法GET, DELETE, POST 和 PUT来操作资源. 下面是进行RESTful Web API十个最佳实践,能为你提供一个良好的API设计风格. 1.使用名词而不是动词 Resource资源 GET读 POST创建 PUT修改 DELETE /cars 返回 cars集合 创建新的资源 批量更新c

DICOM:深入剖析Orthanc的SQLite,了解WADO&RESTful API

背景: 上一篇博文简单翻译了Orthanc官网给出的CodeProject上"利用Orthanc Plugin SDK开发WADO插件"的博文,其中提到了Orthanc从0.8.0版本之后支持快速查询,而原本的WADO请求需要是直接借助于Orthanc内部的REST API逐级定位.那么为什么之前的Orthanc必须要逐级来定位WADO请求的Instance呢?新版本中又是如何进行改进的呢?此篇博文通过分析Orthanc内嵌的SQLite数据库,来剖析Orthanc的RESTful A

理解restful 架构 &amp;&amp; RESTful API设计指南

restful是前端和后端接口中都会使用的设计思想. 网站即软件,我们也常说的webapp,这种互联网软件采用的是“客户端/服务器”模式,建立在分布式体系上. 网站开发,也可以完全采用软件开发的模式,但是传统上软件和网络还是不同的领域,因为: 软件开发主要针对单机环境,而网络是研究系统之间的通信. 互联网的兴起,使得这两个领域开始融合,现在我们开始考虑,如何开发在互联网环境中使用的软件. RESTful架构,就是目前最为流行的一种互联网软件架构,它结构清晰.符合标准.易于理解.扩展方便,所以正得