Elasticsearch搜索引擎学习之三——使用CURL与ES交互

高新技术,ElasticSearch

2017-06-04

189

0

目录


和Elasticsearch 的交互方式取决于 你是否使用 Java。

Elasticsearch为以下语言提供了官方客户端 --Groovy、JavaScript、.NET、 PHP、 Perl、 Python 和 Ruby--还有很多社区提供的客户端和插件,所有这些都可以在 Elasticsearch Clients 中找到。

JAVA API

如果你正在使用 Java,在代码中你可以使用 Elasticsearch内置的两个客户端:

节点客户端(Node client)

节点客户端作为一个非数据节点加入到本地集群中。换句话说,它本身不保存任何数据,但是它知道数据在集群中的哪个节点中,并且可以把请求转发到正确的节点。

传输客户端(Transport client)

轻量级的传输客户端可以将请求发送到远程集群。它本身不加入集群,但是它可以将请求转发到集群中的一个节点上。

两个 Java 客户端都是通过 9300 端口并使用本地 Elasticsearch 传输 协议和集群交互。集群中的节点通过端口 9300 彼此通信。如果这个端口没有打开,节点将无法形成一个集群。

Java 客户端作为节点必须和 Elasticsearch 有相同的 主要 版本;否则,它们之前将无法互相理解。

更多的 Java 客户端信息可以在 Elasticsearch Clients 中找到。

该部分内容我们将在后边深入学习,现在,我们看看如何使用CURL来与Elasticsearch的RESTful API进行交互。

RESTful API with JSON over HTTP

所有其他语言可以使用 RESTful API 通过端口 9200 和 Elasticsearch 进行通信,你可以用你最喜爱的 web 客户端访问 Elasticsearch 。事实上,正如你所看到的,你甚至可以使用 curl 命令来和 Elasticsearch 交互。

一个 Elasticsearch 请求和任何 HTTP 请求一样由若干相同的部件组成: 

curl -X[VERB] '[PROTOCOL]://[HOST]:[PORT]/[PATH]?[QUERY_STRING]' -d '[BODY]'

如上命令,其中使用中括号括起来的部分详细解释如下:

VERB

适当的 HTTP 方法 或 谓词 : GET、 POST、 PUT、 HEAD或者DELETE。

备注:跟我们一般理解的GET请求不一样, 这里在发送GET请求时,参数需要放置到BODY中,而不是直接在URL后边追加。

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 格式的请求体 (如果请求需要的话)

例如,计算集群中文档的数量,我们可以用这个:

执行情况如下:

Administrator@PC-201610162213 MINGW64 ~
$ curl -XGET 'http://localhost:9200/_count?pretty' -d '
> {
>     "query": {
>         "match_all": {}
>     }
> }
> '
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   147  100    97  100    50    692    357 --:--:-- --:--:-- --:--:--   692{
  "count" : 7,
  "_shards" : {
    "total" : 11,
    "successful" : 11,
    "failed" : 0
  }
}

如果在返回结果中我们需要看到HTTP头信息,需要使用-i参数,如下:

curl -i -XGET 'localhost:9200/'
Administrator@PC-201610162213 MINGW64 ~
$ curl -i -XGET 'localhost:9200/'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   327  100   327    0     0   2616      0 --:--:-- --:--:-- --:--:--  2616HT                                  TP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 327

{
  "name" : "ZQuJdW6",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "3kzN71MjSXG69l7O3CNaRQ",
  "version" : {
    "number" : "5.4.0",
    "build_hash" : "780f8c4",
    "build_date" : "2017-04-28T17:43:27.229Z",
    "build_snapshot" : false,
    "lucene_version" : "6.5.0"
  },
  "tagline" : "You Know, for Search"
}

缩写格式显示请求

Elasticsearch官方提供了一种缩写的请求标准格式,格式如下:

GET /_count
{
    "query": {
        "match_all": {}
    }
}

官方推荐的sense工具直接支持以这种格式进行交互请求。sense介绍和安装见上一篇文章,这里不再赘述。

总结

本文介绍了如何使用CURL与Elasticsearch交互,这在初期学习Elasticsearch时很实用,更深入的JAVA客户端代码的交互方式我们放在后边来学习。


前一篇:Elasticsearch搜索引擎学习之二——ES和相关工具的安装
后一篇:Elasticsearch搜索引擎学习之四——文档和索引

belonk

轻轻地我走了,正如我轻轻地来,我挥一挥衣袖,不带走一片云彩