ElasticSearch提供了方便的Restful API对数据进行操作,这篇文章将继续在上篇文章的基础之上使用Restful API进行document的增删改查。
环境准备
可参看如下内容:
基础知识
ElasticSearch是基于Lucene的全文搜索,在搜索对象的管理上,虽然不是一个数据库,在一些常见的概念上还是可以进行大体的类比,相关常见的概念如下所示:
常用术语 | 关系型数据库 | Elasticsearch |
---|---|---|
数据库 | database | index |
表 | table | type |
行 | row | document |
列 | column | field |
对于document的增删改查
数据库使用insert/delete等DML语句对相关的表进行增删改查的操作,而事先需要使用DDL语言进行schema的定义,在前面的文章中对Elasticsearch的介绍中就已经提到过,Elasticsearch无需预先进行schema的定义,这也是和传统的关系型数据库比如MySQL或者Oracle明显的区别之一。
相较于数据库的数据的增删改查的类似操作,在ElasticSearch中,也可以通过Restful的API非常容易地做到,以下结合具体使用示例来进行说明。
事前准备
创建一个名为test_index_1的index,用于保存document的相关数据。
设定项 | 设定值 | 说明 |
---|---|---|
ElasticSearch URL | http://localhost:9200 | 可以访问到的Elasticsearch的环境,此处为本机的服务 |
HTTP方法 | PUT | 使用PUT进行索引的创建 |
index名称 | /test_index_1 | 指定创建的索引的名称 |
执行日志如下所示:
从返回的json结果的acknowledged字段为true可以判断此index已经成功创建。
[root@host131 ~]# curl -XGET http://localhost:9200/_cat/indices
[root@host131 ~]# curl -XPUT http://localhost:9200/test_index_1?pretty
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "test_index_1"
}
[root@host131 ~]# curl -XGET http://localhost:9200/_cat/indices
yellow open test_index_1 1xy1jsRTQKmZLUj9dPoLmg 1 1 0 0 230b 230b
[root@host131 ~]#
指定id方式创建document
创建如下document相关信息,用于记录相关人员的姓名/编号/兴趣的信息。
字段 | 设定值 |
---|---|
name | liumiaocn |
userid | 1001 |
hobby | swimming |
设定项 | 设定值 | 说明 |
---|---|---|
ElasticSearch URL | http://localhost:9200 | 可以访问到的Elasticsearch的环境,此处为本机的服务 |
HTTP方法 | PUT | 使用PUT进行document的创建 |
Content-Type | application/json | 指定json作为Content-Type而非x-www-form-urlencoded |
index名称 | /test_index_1 | 指定索引的名称,document将保存在此index中 |
type名称 | persons/ | 指定document的type信息 |
id编号 | 1/ | 指定Elasticsearch所用的id编号,如不指定会自动生成 |
- 执行命令
curl -XPUT -H Content-Type:application/json http://localhost:9200/test_index_1/persons/1 -d '{
"name": "liumiaocn",
"userid": 1001,
"hobby": "swimming"
}'
- 执行日志示例
执行日志示例如下所示,从返回的信息中可以看到成功创建的信息。
[root@host131 ~]# curl -XPUT -H Content-Type:application/json http://localhost:9200/test_index_1/persons/1 -d '{
> "name": "liumiaocn",
> "userid": 1001,
> "hobby": "swimming"
> }';
{"_index":"test_index_1","_type":"persons","_id":"1","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}[root@host131 ~]#
- 常见错误信息
如不指定Content-Type,缺省form表单的提交可能会得到如下错误提示:
{"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}
而从整体的index信息中,也可以查询到此index的document的信息,docs.count的数量可以看到为1(注意此值的更新会受Elasticsearch的缺省或者手动refresh的操作的影响)。
[root@host131 ~]# curl