elasticsearch实例讲解增删改查
1、首先弄明白四个概念
elasticsearch | 关系型数据库 |
index | 数据库 |
type | 表 |
document | 行 |
field | 字段 |
如果刚一开始理解比较困难,那你就在心中默念100遍,10遍也可以。。。
如果你做过面向对象开发,我觉得elasticsearch的这四个概念还是很好理解的。
需要重点说明的是document就是一个json格式的字符串,里面包括N个字段。我们可以想象将面向对象语言里面的一个对象序列化成json字符串。
关系型数据库需要先建库,再建表。elasticsearch不需要,在你新增的时候会根据你指定的index,type,document,field自动创建。当然先创建索引也是可以的。
接下来的测试我会这么定义我们的index,type
index:news
type:new
field:title,content。就两个吧,如下:
{ "title":"", "content":"" }
我使用的客户端是kibana。
2、新增document
PUT news/new/6 { "title":"title test", "conent":"content test" }
结果:
{ "_index": "news", "_type": "new", "_id": "6", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 2, "failed": 0 }, "created": true }
解释下:
PUT news/new/6
这条命令的原型是这样的:
PUT index/type/id
PUT命令是http请求的一种方式,如果了解过restful api,对这个命令应该不陌生。除了我们大家熟悉的get,post,还有put,delete,head等。
news就是我们需要创建的索引,可以理解为数据库
new就是我们需要创建的type,可以理解为表
6就是文档的id,可以理解为一条记录的id
仔细看返回结果,先别看_shards,其它几个字段大家看了之后应该会立马明白。
_version,是elasticsearch里面用来控制版本冲突的,知道下就行,如果修改或者删除,_version的值都会+1。
3、修改document
修改又分为全量修改和部分修改
全量修改用PUT,部分修改用POST
全量修改:
PUT news/new/6 { "title":"title test" }
用查询命令(下面有)查看结果:
{ "_index": "news", "_type": "new", "_id": "6", "_version": 2, "found": true, "_source": { "title": "title test" } }
纳尼?我的content字段呢?问题就出在这里,如果用全量修改(PUT),就等于是删除之后再新建。
如果有人说我只想修改title字段怎么办?看下面。
部分修改
POST /news/new/6/_update { "doc":{ "title":"abcdefg" } }
用查询命令(下面有)查看结果:
{ "_index": "news", "_type": "new", "_id": "6", "_version": 4, "found": true, "_source": { "title": "abcdefg", "content": "content test" } }
我在执行POST命令前,把数据恢复了,所以在执行POST命令且只修改title字段后,content还是保留的。且_version变成了4,而不是3。
4、查询document
GET /news/new/6
结果:
{ "_index": "news", "_type": "new", "_id": "6", "_version": 4, "found": true, "_source": { "title": "abcdefg", "content": "content test" } }
5、删除document
DELETE /news/new/6
结果:
{ "found": true, "_index": "news", "_type": "new", "_id": "6", "_version": 5, "result": "deleted", "_shards": { "total": 2, "successful": 2, "failed": 0 } }
很简单。简单的增删改查介绍完毕。
剧透一下,接下来会讲中文分词+全文搜索