ES语法(一)

和ES的交互方式取决于你是否使用JAVA

1)java api:如果你正在使用Java,在代码中你可以使用 ElasticSearch 内置的两个客户端:节点客户端(Node client)、传输客户端(Transport client)。Java客户端默认端口是9300,并且使用ES的原生传输协议和集群进行交互。

2)RESTful API with JSON over HTTP:所有其他语言可以使用RESTful API 通过端口9200和 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 。

PATH

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

QUERY_STRING

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

BODY

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

在 ES 中,用户的一切操作和行为都是围绕 REST 风格的 HTTP API 进行的。ES 中所有接口的语义都严格遵守 REST 规范。

一、索引:

1、创建索引    PUT /player
2、删除索引     DELETE /player
3、查看所有索引       GET /_cat/indices?v , ?v 的意思 显示列出项 的title

4、查看节点健康 get /_cat/health?v

二、新增文档:

1、POST:通过 POST 新增文档:POST /索引/类型    文档

只能新增文档,Index 并不需要提前建好; POST 不保证幂等性,因此每次的 POST 请求都会在系统新增一条文档。对于新增的文档,系统会自动生成一个唯一 ID。如

POST /wtyy-test/user
{
  "name":"张三",
  "age":18,
  "address":"北京"
}

对于以上请求来说,通过 POST 把对应的数据存储在了索引 wtyy-test 中。对于用户指定的 Index,如果不存在,ES 会自动建立对应的 Index。 

2、PUT:通过 PUT 新增文档:PUT   /索引/类型/id    文档

可以使用 POST /索引/类型  不带id 的方式自动生成id,put不支持不带id的写法,通过PUT 新增数据需要手动指定该条数据的唯一 id。这个唯一 id 不必要是数字,任何合法字符串均可。注意id如果存在会更新文档,如果只插入不更新可以在后面 加上 /_create (这时候会提示已经存在)

PUT /wtyy-test/user/1
{
  "name":"王五",
  "age":22,
  "address":"湖北"
}

上述的 /wtyy-test/user/1 中的 1即为id 

三、修改文档:

1、POST:POST    /索引/类型/id    文档

 1) post 虽然叫做修改,但是 在带有id 的情况下 和 put 几乎一样(id 存在就是 全量 修改,不存在就是 新增)。

POST /wtyy-test/user/1
{
  "name":"王五",
  "age":25,
  "address":"湖北",
  "school":"测试学校"
}

 2)post 可以 指定_update ,指定更新字段,并且 可以带_create:POST    /索引/类型/id/_update    {"doc":{字段}}

POST /wtyy-test/user/1/_update
{
  "doc":{
    "name":"王五1",
    "age":1
  }
}

 2、 PUT:PUT  /索引/类型/id    文档

PUT 保证幂等性。因此在提交的时候需要指定一个唯一 id,对于同一个唯一 id 来说,无论 PUT 多少次,ES 只会修改这个 id 对应文档的内容,而不会新增文档;我们可以用 PUT + 指定唯一 id 的方式,来修改和更新文档。如:

PUT /wtyy-test/user/AXVuBYO2QnB0qZbmUT69
{
  "name":"李四",
  "age":20,
  "address":"重庆"
}

四、删除文档:DELETE ,语法:DELETE  /索引/类型/id。如:

DELETE /wtyy-test/user/AXVuBYIcQnB0qZbmUT68

DELETE 也是幂等性操作,在使用的时候也需要指定唯一 ID。es  的删除是 是假删除并且在下一次merge的时候真删除

五、批处理bulk:一次可以进行多个新增、更新和删除等修改行为的动作。bulk的格式:action:index/create/update/delete 后面如果有请求体就跟上请求体。

   1)delete 没有请求体。

   2)create 和 update 只有在指定的状态才能成功 create 创建 ,update 更新。

   3)批处理中的一个 失败不影响 其他的 执行。 

 4)update 需要 doc 包一层

 5)index 有create 和 update 的 功能,并且支持  又或者 没有 doc 包一层都支持。

POST _bulk
{"index" : { "_index" : "es-test"} }
{"message" : "this is my blog"}
{"create" : { "_index" : "es-test", "_id" : "3"} }
{"message" : "this is my blog"}
{"delete" : { "_index" : "es-test", "_id" : "2"} }
{"update" : {"_id" : "1", "_index" : "test"} }
{"message" : "this is my blog"}

以上包含了 4 种操作 indexcreatedelete 和 update。 其中 indexcreate 和 update 都包含两行,一行是具体的操作,一行是文档内容。index 和 create 的区别在于,create 会携带一个唯一 id,如果该 id 存在,则插入失败。 

六、常见问题:

1、遇到 Fielddata is disabled on text fields by default 异常的 解决方案,因为text类型默认没有正排索引,所以不支持排序 和聚合 ,遇到这种 异常的时候 需要制定 开启正排索引。倒排索引用于搜索,正排索引用于排序和聚合。开启正排索引的方法。

put user/_mapping/student/
{
  "properties": {
    "sex": {
      "type":"text",
      "fielddata":true
    }
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值