ElasticSearch文档操作[ES系列] - 第502篇

科技   2024-03-18 17:29   福建  

计500+
Spring Boot
Spring Boot
Spring Boot
Spring Boot
Spring Boot

Spring Boot

Spring Boot


Elasticsearch可视化平台Kibana [ES系列] - 第498篇

Elasticsearch安装分词插件[ES系列] - 第499篇

ElasticSearch扫盲概念篇[ES系列] - 第500篇

ElasticSearch重建/创建/删除索引操作 - 第501篇


Hi,大家好,我是悟纤。我就是我,不一样的烟火。我就是我,与众不同的小苹果。

这一节来看看ES的文档基本操作 增删改查。


一、文档操作

1.1 索引文档

- 格式: [PUT | POST] /索引名称/[_doc  | _create ]/id

# 创建文档, 指定id# 如果id不存在,创建新的文档,否则先删除现有文档,再创建新的文档,版本会增加PUT /es_db/_doc/1{  "name": "张三",  "sex": 1,  "age": 25,  "address": "广州天河公园",  "remark": "java developer"}#创建文档,ES生成idPOST /es_db/_doc{  "name": "张三",  "sex": 1,  "age": 25,  "address": "广州天河公园",  "remark": "java developer"}


注意:POSTPUT都能起到创建/更新的作用PUT需要对一个具体的资源进行操作也就是要确定id才能进行更新/创建,而POST是可以针对整个资源集合进行操作的,如果不写id就由ES生成一个唯一id进行创建新文档,如果填了id那就针对这个id的文档进行创建/更新

1.2查询文档

- 根据id查询文档,格式: GET /索引名称/_doc/id

GET /es_db/_doc/1

- 条件查询 _search,格式: /索引名称/_doc/_search

# 查询前10条文档GET /es_db/_doc/_search

ES Search API提供了两种条件查询搜索方式:

· REST风格的请求URI,直接将参数带过去

· 封装到request body中,这种方式可以定义更加易读的JSON格式


1.2.1 URI Query(了解即可)

#通过URI搜索,使用“q”指定查询字符串,“query string syntax” KV键值对
#条件查询, 如要查询age等于28岁的 _search?q=*:***GET /es_db/_doc/_search?q=age:28
#范围查询, 如要查询age在25至26岁之间的 _search?q=***[** TO **] 注意: TO 必须为大写GET /es_db/_doc/_search?q=age[25 TO 26]
#查询年龄小于等于28岁的 :<=GET /es_db/_doc/_search?q=age:<=28#查询年龄大于28前的 :>GET /es_db/_doc/_search?q=age:>28
#分页查询 from=*&size=*GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1
#对查询结果只输出某些字段 _source=字段,字段GET /es_db/_doc/_search?_source=name,age
#对查询结果排序 sort=字段:desc/ascGET /es_db/_doc/_search?sort=age:desc


1.2.2 DSL Query

DSLDomain Specific Language领域专用语言)查询是使用Elasticsearch的查询语言来构建查询的方式。

# match 匹配查询,会对查询文本分词后匹配GET /es_db/_search{  "query": {    "match": {    "address": "广州白云"    }  }}
# term 词项查询,属于精确查询,不会对查询文本分词# 思考:能否查到文档?GET /es_db/_search{ "query": { "term": { "address": "广州白云" } }}


1.3修改文档

- 全量更新,整个json都会替换,格式: [PUT | POST] /索引名称/_doc/id

# 全量更新,替换整个jsonPUT /es_db/_doc/1{  "name": "张三",  "sex": 1,  "age": 25}
#查询文档GET /es_db/_doc/1

- 使用_update部分更新,格式: POST /索引名称/_update/id

update不会删除原来的文档,而是实现真正的数据更新

# 部分更新:在原有文档上更新# Update -文档必须已经存在,更新只会对相应字段做增量修改POST /es_db/_update/1{  "doc": {    "age": 28  }}
#查询文档GET /es_db/_doc/1

- 使用 _update_by_query 更新文档:更新符合条件的文档

POST /es_db/_update_by_query{  "query": {    "match": {      "_id": 1    }  },  "script": {    "source": "ctx._source.age = 30"  }}

1.4并发场景下修改文档

_seq_no_primary_term是对_version的优化,7.X版本的ES默认使用这种方式控制版本,所以当在高并发环境下使用乐观锁机制修改文档时,要带上当前文档的_seq_no_primary_term进行更新:

GET /es_db/_doc/1

POST /es_db/_doc/1?if_seq_no=6&if_primary_term=1{"name": "李四xxx"}

如果版本号不对,会抛出版本冲突异常,如下图:

1.5删除文档

格式: DELETE /索引名称/_doc/id

DELETE /es_db/_doc/1


à悟纤https://t.cn/Rg3fKJD

Spring Boot

SpringBoothttp://t.cn/A6ZagYTi

SpringBoothttps://t.cn/R3QDhU0

SpringSecurity5.0http://t.cn/A6ZadMBe

ShardingJDBC分库分表http://t.cn/A6ZarrqS

分布式事务解决方案http://t.cn/A6ZaBnIr

JVM内存模型http://t.cn/A6wWMVqG

Spring入门到精通:https://t.cn/A6bFcDh4

大话设计模式之爱你:https://dwz.cn/wqO0MAy7

SpringBoot
Suno AI制作音乐,Viggle AI - 照片跳舞,AI音乐,Noisee AI制作MV。Spring Boot技术。博客已有400+,文章特色:一个知识点一个系列、让技术变得简单、文章轻松幽默,悟纤和师傅趣谈更是轻松有趣。
 最新文章