引言
通过上篇博客,我们已经在Linux环境下安装好了单机版的Elasticsearch和Head插件。本篇博客主要是照着官网操作一些API,熟悉一下如何建立、查询索引等操作,熟悉一下Head管理页面,这样在后面集成代码的过程中也会有所共鸣。
Index API
通过Index API,我们可以创建或者更新一个具体的索引,数据是JSON格式的文档,通过下面的命令,可以创建一个名为book,类型为_doc,id为377c-11ea-bbca-ec0d9a30b0c2的索引:
curl -X PUT 'localhost:9200/book/_doc/377c-11ea-bbca-ec0d9a30b0c2' -d '{"id":"58d9646a-377c-11ea-bbca-ec0d9a30b0c2","name":"知识课堂","grade":"九年级","subject":"语文","version":"人教版"}'
返回结果失败:

这里需要我们添加上请求头,所以上面的命令需要修改一下:
curl -H "Content-Type: application/json" -X PUT 'localhost:9200/book/_doc/58d9646a-377c-11ea-bbca-ec0d9a30b0c2' -d '{"name":"知识课堂","grade":"九年级","subject":"语文","version":"人教版"}'
返回结果成功:
{
"_index": "book",
"_type": "_doc",
"_id": "58d9646a-377c-11ea-bbca-ec0d9a30b0c2",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
返回结果中的"_shard"头信息给我们提供了关于分片的结果,total是指有多少个分片(主分片和副分片的总数)。
在不指定id的情况下,我们需要用POST请求,而不是PUT,结果中会返回一个自动生成的id。
curl -H "Content-Type: application/json" -X POST 'localhost:9200/book/_doc' -d '{"name":"知识演练课堂","grade":"八年级","subject":"数学","version":"北师大版"}'
返回结果:
{
"_index": "book",
"_type": "_doc",
"_id": "qTd_YXQBUDqEcIQQ2OB3",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
Get API
通过Get API,我们可以从索引中获取到已经存在的数据,通过下面的命令,我们可以得到索引为Book,类型为_doc,id为58d9646a-377c-11ea-bbca-ec0d9a30b0c2的JSON文档数据:
curl 'localhost:9200/book/_doc/58d9646a-377c-11ea-bbca-ec0d9a30b0c2?pretty=true'
URL后面pretty=true的含义是返回易读格式。
返回结果:

返回的数据中,found字段表示查询成功,_source字段返回原始记录。
查不到,返回的found字段值则是false。
Delete API
通过delete API,我们删除指定id的索引数据:
curl -X DELETE 'localhost:9200/book/_doc/58d9646a-377c-11ea-bbca-ec0d9a30b0c2"'
返回的结果:
{
"_index": "book",
"_type": "_doc",
"_id": "58d9646a-377c-11ea-bbca-ec0d9a30b0c2\"",
"_version": 2,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
返回的结果,result字段返回deleted,表明已经删除。如果没有查询到指定的记录,result字段返回的是not_found.
Update API
通过Update API,我们更新索引数据,和新增index发送的请求参数一致:
curl -H "Content-Type: application/json" -X PUT 'localhost:9200/book/_doc/qTd_YXQBUDqEcIQQ2OB3' -d '{"name":"数学知识演练课堂","grade":"八年级","subject":"数学","version":"北师大版"}'
通过上面的请求,我们把原来的书名字“知识演练课堂”改成“数学知识演练课堂”,下面是返回的结果:
{
"_index": "book",
"_type": "_doc",
"_id": "qTd_YXQBUDqEcIQQ2OB3",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 3,
"_primary_term": 1
}
从结果上,我们可以看出,更新之后,版本version从原来的1变成了2,操作类型(result)从created变成updated。

Search API
curl -X GET 'localhost:9200/book/_doc/_search?pretty=true'
返回的结果:

返回结果的 took字段表示该操作的耗时(单位为毫秒),timed_out字段表示是否超时,hits字段表示命中的记录,其中total表示总数,hits表示索引数据。
1)term查询八年级的记录:
curl -H "Content-Type: application/json" -X POST 'localhost:9200/book/_doc/_search?pretty=true' -d '{"query":{"term":{"grade.keyword":"八年级"}}}'
返回的结果:

2)match查询北师大版的记录:
curl -H "Content-Type: application/json" -X POST 'localhost:9200/book/_doc/_search?pretty=true' -d '{"query":{"match":{"version.keyword":"北师大版"}}}'
返回的结果:

这里使用的term和match关键字,匹配查询结果,并且字段需要加上.keyword才能查询到结果,这属于6.X版本的新特性,引入了keyword.
上面都是一些比较简单的总结,属于熟悉Elasticsearch语法和结构的阶段,后面在实际应用中,可能会遇到各种各样的问题,先有一些简单了解,不至于到时候不知从何入手。