(3)与 Elasticsearch 交互

如何与 Elasticsearch 交互取决于你是否使用 Java。

Java API

Elasticsearch· 为 Java 用户提供了两种内置的客户端。

节点客户端(node client)

节点客户端以无数据节点(none data node)身份加入集群。换言之,它自己不存储任何数据,但是它知道数据在集群中的具体位置,并且能够直接转发请求到对应的节点上。

传输客户端(Transport client)

这个更轻量级的传输客户端能够发送请求到远程集群。它自己不加入集群,只是简单转发请求给集群中的节点。
两个 Java 客户端都通过9300端口与集群交互,使用 Elasticsearch 传输协议(Elasticsearch Transport Protocol)。集群中的节点之间也通过 9300 端口进行通信。如果此端口未开放,你的节点将不能组成集群。
注意:Java 客户端所在的 Elasticsearch 版本必须与集群中的其他节点一致,否则,它们可能互相无法识别。

基于 HTTP 协议,以Json为数据交互格式的Restful API

其他所有程序语言都可以使用Restful API,通过 9200 端口与 Elasticsearch 进行通信,你可以使用你喜欢的 WEB 客户端,事实上,如你所见,你甚至可以通过 curl 命令与 Elasticsearch 通信。

向 Elasticsearch 发出的请求的组成部分与其他普通的HTTP请求是一样的:

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
QUERY_STRING 一些可选的查询请求参数,例如?pretty 参数将请求返回更加美观易读的JSON数据
BODY 一个JSON格式的请求主体(如果请求需要的话)

举例说明,为了计算集群中的文档数量,我们可以这样做:

curl -XGET 'http://localhost:9200/_count?pretty' -d '
{
    "query":{
        "match_all":{}
    }
}'

es 会返回一个类似 200 OK 的HTTP状态码和 JSON 格式的响应主体(除了HEAD请求)。上面的请求会得到如下的JSON格式的响应主体:

{
  "count" : 3,
  "_shards" : {
    "total" : 10,
    "successful" : 10,
    "failed" : 0
  }
}

看不到 HTTP 头是因为我们没有让 curl 显示它们,如果要显示,使用 curl 命令后面跟 -i 参数:

curl -i -XGET 'localhost:9200/_count?pretty' -d '
{
    "query":{
        "match_all":{}
    }
}'

HTTP/1.1 200 OK
Warning: 299 Elasticsearch-5.4.0-780f8c4 "Content type detection for rest requests is deprecated. Specify the content type using the [Content-Type] header." "Wed, 29 Aug 2018 02:36:47 GMT"
content-type: application/json; charset=UTF-8
content-length: 97

{
  "count" : 3,
  "_shards" : {
    "total" : 10,
    "successful" : 10,
    "failed" : 0
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值