ES和关系型数据库的数据对比
1、创建索引库
PUT/POST都可以,索引库名称必须全部小写,不能以下划线开头,也不能包含逗号
curl -XPUT 'http://192.168.136.131:9200/wangxiangyu_index/'
{"acknowledged":true}[root@localhost ~]#
在Marvel中查看:http://localhost:5601/app/marvel
2、创建索引
curl -XPOST http://192.168.136.131:9200/wangxiangyu_index/employee/1 -d '{
"first_name":"john",
"last_name":"smith",
"age":"25",
"about":"I love to go rock climbing"
}'
如果没有明确指定索引数据的ID,ES会自动生成一个随机的ID,需要使用POST参数
PUT和POST用法
PUT是幂等方法,POST不是。所以PUT用于更新、POST用于新增比较合适。
PUT,DELETE操作是幂等的。所谓幂等是指不管进行多少次操作,结果都一样。比如我用PUT修改一篇文章,然后在做同样的操作,每次操作后的结果并没有不同,DELETE也是一样。
POST操作不是幂等的,比如常见的POST重复加载问题:当我们多次发出同样的POST请求后,其结果是创建出了若干的资源。
还有一点需要注意的就是,创建操作可以使用POST,也可以使用PUT,区别在于POST是作用在一个集合资源之上的(/articles),而PUT操作是作用在一个具体资源之上的(/articles/123),比如说很多资源使用数据库自增主键作为标识信息,而创建的资源的标识信息到底是什么只能由服务端提供,这个时候就必须使用POST。
GET查询索引
查询所有
curl -XGET http://192.168.136.131:9200/wangxiangyu_index/employee/_search
按条件查询
curl -XGET http://192.168.136.131:9200/wangxiangyu_index/employee/_search?q=last_name:smith
curl -XGET http://192.168.136.131:9200/wangxiangyu_index/employee/1?pretty
在任意查询字符串中加pretty参数,es可以得到易于识别的json结果
curl后添加-i参数,可以得到反馈头文件
curl -i 'http://192.168.136.131:9200/wangxiangyu_index/employee/1?pretty'
检索文档中一部分数据
curl -XGET http://192.168.136.131:9200/wangxiangyu_index/employee/1?_source=age,about&pretty
只查询source部分的数据
curl -XGET http://192.168.136.131:9200/wangxiangyu_index/employee/1?_source
ES的更新
ES可以使用PUT或者POST对文档进行更新,如果指定ID的文档已经存在,则执行更新操作
注意:执行更新操作的时候
1、ES首先将旧的文档标记为删除状态
2、然后添加新的文档
3、旧的文档不会立即消失,但是也无法访问
4、ES会在你继续添加更多数据时在后台清理已经标记为删除状态的文档
局部更新
可以添加新字段或者更新已有的字段(必须使用POST)
curl -XPOST http://192.168.136.131:9200/wangxiangyu_index/employee/3/_update -d '{
"doc":{
"city":"beijing",
"car":"havel"
}
}'
ES的删除
curl -XDELETE http://192.168.136.131:9200/wangxiangyu_index/employee/4
curl -XDELETE 'http://192.168.136.131:9200/wangxiangyu_index/employee/_query?q=user:kimchy'
删除一个文档也不会立即生效,它只是被标记成已删除,ES将会在你之后添加更多索引的时候才会在后台进行删除内容的清理。