说明:该博客对应的Elasticsearch 的版本为7.8.0;测试工具为postman
1.数据格式
Elasticsearch是面向文档型数据库一条数据就是一个文档,将Elasticsearch里存储文档数据和关系型数据库mysql存储做一个对比.
ES 里的 Index 可以看做一个库,而 Types 相当于表,Documents 则相当于表的行。 这里 Types 的概念已经被逐渐弱化,Elasticsearch 6.X 中,一个 index 下已经只能包含一个 type,Elasticsearch 7.X 中, Type 的概念已经被删除了
2.文档CRUD命令
Elasticsearch分布式,restful风格的搜索和分析
PUT:创建或者修改
DELETE:删除
GET:获取
POST:创建
重点:post和put的区别
(1)如果确定文档的ID,PUT和GET都可以,如果ID存在就是创建,ID不存在就是修改.
(2)PUT、GET、DELETE是幂等的,而POST并不一定是幂等。如果POST也指定了ID和PUT没有区别,它也是幂等。如果你没有指定文档ID那么就不是幂等操作,因为同一数据,你执行多次POST,那么生成多个UUID的文档,也就是每POST一次都会新增一条数据。
2.1创建文档
2.1.1,创建空索引(mysql中创建一个空的数据库):
Put请求(注意创建空索引时不能使用post请求)
PUT http://localhost:9200/shopping
执行结果
2.1.2,post创建文档(mysql中有数据的数据库)不指定文档id
POST http://localhost:9200/shopping/_doc
{
"name":"zhangsan",
"age":"23",
"sex":"男"
}
执行结果
2.1.3使用post创建指定id的文档
POST http://localhost:9200/shopping/_doc/1001
{
"money": "1002",
"date": "2021-07-31",
"owner": "hejiaojiao"
}
执行结果
2.1.4,使用put创建指定id文档
PUT http://localhost:9200/shopping/_doc/1001
{
"name":"zhangsan",
"age":"23",
"sex":"男"
}
2.2查询文档
2.2.1查询所有文档
执行结果
2.2.2根据id查询文档
执行结果
各个标签的介绍
_index 文档所属索引名称。
_type 文档所属类型名。
_id Doc的主键。在写入的时候,可以指定该Doc的ID值,如果不指定,则系统自动生成一个唯一的UUID值。
_version 文档的版本信息。Elasticsearch通过使用version来保证对文档的变更能以正确的顺序执行,避免乱序造成的数据丢失。
_seq_no 严格递增的顺序号,每个文档一个,Shard级别严格递增,保证后写入的Doc的_seq_no大于先写入的Doc的_seq_no。
primary_term primary_term也和_seq_no一样是一个整数,每当Primary Shard发生重新分配时,比如重启,Primary选举等,_primary_term会递增1
found 查询的ID正确那么ture, 如果 Id 不正确,就查不到数据,found字段就是false。
_source 文档的原始JSON数据。
2.3删除文档
2.3.1删除索引及所有文档
2.3.2根据ID删除文档(mysql中根据id删除整行数据)
2.3.2 根据筛选条件批量删除
1.可以通过delete_by_query对要删除的doc进行条件过滤,具体语法如下:
POST {index}/_delete_by_query
{
"query": {
"bool":{
"must":[
{"range":{
"endTime":{
//大于
"gt":1100010
}
}
} ,
{
"term":{
"deviceIp":"10.8.5.204"
}
}
]
}
}}
2.4更新文档
PUT和POST执行的时候,如果指定的文档ID存在,那么就可以执行更新操作。不过它们执行的是全量更新(修改单个字段时也要带上其他字段,更新一次"_version"加一),如果需要单独对某字段更新我们可以使用关键字_update(POST)
{
"doc":{
"money":"update1003" #{要修改的字段}
}
}
执行结果