文章目录
Elasticsearch入门使用
概念
索引(index)
类似的数据放在一个索引,非类似的数据放不同索引, 一个索引也可以理解成一个关系型数据库。
类型(type)
代表document属于index中的哪个类别(type)也有一种说法一种type就像是数据库的表,比如dept表,user表。
注意ES每个大版本之间区别很大:
ES 5.x中一个index可以有多种type。
ES 6.x中一个index只能有一种type。
ES 7.x以后 要逐渐移除type这个概念。
映射(mapping)
mapping定义了每个字段的类型等信息。相当于关系型数据库中的表结构。
常用数据类型:text、keyword、number、array、range、boolean、date、geo_point、ip、nested、object
对比MYSQL可以看到
新增文档
文档,即索引库中的数据,会根据规则创建索引,将来用于搜索。可以类比做数据库中的一行数据。
手动指定Id
POST /test01_demo/_doc/1
{
"name": "百度",
"job": "小度用户运营经理",
"payment": "30000",
"logo": "http://www.lgstatic.com/thubnail_120x120/i/image/M00/21/3E/CgpFT1kVdzeAJNbU AABJB7x9sm8374.png"
}
自动生成id
POST /test01_demo/_doc/ //这不需要指定id即可
{
"name": "auto 百度",
"job": "auto 小度用户运营经理",
"payment": "100",
"logo": "http://www.lgstatic.com/thubnail_120x120/i/image/M00/21/3E/CgpFT1kVdzeAJNbU AABJB7x9sm8374.png"
}
查看单个文档
字段说明
查看所有文档
POST /test01_demo/_search
{
"query":{
"match_all": {}
}
}
返回指定字段
需要使用 _source 进行指定
POST /test01_demo/_search?_source=name,job
{
"query":{
"match_all": {}
}
}
更新文档(全部更新)
这里使用为PUT也可以
id对应文档存在,则修改
POST /test01_demo/_doc/1
{
"name": "百度 update",
"job": "小度用户运营经理",
"payment": "10000",
"logo": "http://www.lgstatic.com/thubnail_120x120/i/image/M00/21/3E/CgpFT1kVdzeAJNbU AABJB7x9sm8374.png"
}
id对应文档不存在,则新增
// 更新
POST /test01_demo/_doc/3
{
"name": "百度 update 333 ",
"job": "小度用户运营经理",
"payment": "10000",
"logo": "http://www.lgstatic.com/thubnail_120x120/i/image/M00/21/3E/CgpFT1kVdzeAJNbU AABJB7x9sm8374.png"
}
可以看到Id为3的数据不存在,es直接新增
当前更新为全量更新,可以看到字段只剩一个了
先更新
// 更新
POST /test01_demo/_doc/3
{
"name": "百度 update 333 "
}
再查看
// 查看id 3的文档
GET /test01_demo/_doc/3
可以看到当前数据version 是 2 表示此数据目前经历过2个版本,新增一次 修改一次。
Elasticsearch可以使用PUT或者POST对文档进行更新(全部更新),如果指定ID的文档已经存在,则执行更新操作。
更新文档(局部更新)
Elasticsearch执行更新操作的时候,Elasticsearch首先将旧的文档标记为删除状态,然后添加新的文档,旧的文档不会立即消失,但是你也无法访问,Elasticsearch会在你继续添加更多数据的时候在后台清理已经标记为删除状态的文档。
全部更新,是直接把之前的老数据,标记为删除状态,然后,再添加一条更新的(使用PUT或者POST)
局部更新,只是修改某个字段(使用POST)
// 局更新 更新值 然后再新增一个job属性
POST /test01_demo/_update/3
{
"doc": {
"name": "百度 update 444",
"job":"java 开发"
}
}
// 查看
GET /test01_demo/_doc/3
删除文档
将刚才id是3的删除
DELETE /test01_demo/_doc/3
根据条件删除
POST /test01_demo/_delete_by_query
{
"query": {
"match": {
"job": "java 开发"
}
}
}
删除所有文档
# 删除所有
POST /test01_demo/_delete_by_query
{
"query": {
"match_all": {}
}
}
文档的全量替换、强制创建
全量替换
语法与创建文档是一样的,如果文档id不存在,那么就是创建;如果文档id已经存在,那么就是全量替换操作,替换文档的json串内容;
文档是不可变的,如果要修改文档的内容,第一种方式就是全量替换,直接对文档重新建立索引,替换里面所有的内容,elasticsearch会将老的文档标记为deleted,然后新增我们给定的一个文档,当我们创建越来越多的文档的时候,elasticsearch会在适当的时机在后台自动删除标记为deleted的文档
强制创建
语法
PUT /index/_doc/{id}?op_type=create {}
PUT /index/_doc/{id}/_create {}
PUT /test01_demo/_doc/3?op_type=create
{
"query": {
"match": {
"job": "java 开发"
}
}
}
或者
PUT /test01_demo/_doc/3/_create
{
"query": {
"match": {
"job": "java 开发"
}
}
}
如果id 存在就会报错