查看“ElasticSearch基础:文档CRUD”的源代码
←
ElasticSearch基础:文档CRUD
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:ElasticSearch教程]] == 关于 == Elasticsearch 是'''面向文档的存储引擎''',存储的数据是以'''JSON'''文档为基本单位进行的,所以需要关注其对 ES 中文档的 CRUD 操作。 === 什么是文档 === 在 Elasticsearch 中,文档其实就是一条 JSON 数据。 JSON 数据格式可以非常复杂,也可以很简单。 JSON 文档的例子: <syntaxhighlight lang="JSON" highlight=""> { "id": 12, "status": 1, "total_price": 100, "create_time": "2019-12-12 12:20:22", "user" : { // 嵌套json对象 "id" : 11, "username": "tizi365", "phone": "13500001111", "address" : "上海长宁区001号" } } </syntaxhighlight> === '''文档元数据''' === 文档元数据,指的是插入 JSON 文档的时候,Elasticsearch 为这条数据'''自动生成的系统字段'''。 * '''元数据的字段名都是以下划线开头的'''。 常见的元数据如下: * '''_index''':代表当前 JSON 文档所属的文档名字。 * '''_type''':代表当前 JSON 文档所属的类型。 ** 虽然新版 ES 废弃了 type 的用法,但是元数据还是可以看到。 * '''_id''':文档唯一Id。 ** 如果我们没有为文档指定 id,系统会自动生成。 * '''_source''':代表我们插入进去的 JSON 数据。 * '''_version''':文档的版本号。 ** 每修改一次文档数据,字段就会加 1。 ** 新版 ES 已不再使用。 * '''_seq_no''':文档的'''版本号'''(替代 _version 字段)。 * '''_primary_term''':文档所在'''主分区''',这个可以跟 _seq_no 字段搭配实现'''乐观锁'''。 示例:从ES查询出来的一条文档 <syntaxhighlight lang="JSON" highlight=""> { "_index" : "order", "_type" : "_doc", "_id" : "1", "_version" : 1, // 老ES版本的文档版本号,最新版本已经不使用了 "_seq_no" : 0, // 新ES版本的文档版本号 "_primary_term" : 1, // 主分区id "_source" : { // _source字段保存的就是我们插入到ES中的JSON数据 "id" : 1, "status" : 1, "total_price" : 100, "create_time" : "2019-12-12 12:20:22", "user" : { "id" : 11, "username" : "tizi365", "phone" : "13500001111", "address" : "上海长宁区001号" } } } </syntaxhighlight> == 文档的CRUD == === 插入 === 在 Elasticsearch 插入一个 JSON 文档,又叫'''索引文档''',其实就是创建索引的过程。 * (索引文档,是个动词,区别于文档的索引名) 语法: <syntaxhighlight lang="java" highlight=""> PUT /{index}/{type}/{id} { "field": "value", ... } </syntaxhighlight> 其中: * PUT 代表发送一个 http put 请求,后面的URL参数说明: ** {index}:索引名 ** {type}:文档类型名 ***(新版的 Elasticsearch 为了兼容老版本,只允许指定一个类型,随便设置一个类型名即可)。 ** {id}:文档的唯一 id *** 可以不指定,如果不指定 id,需要使用 '''POST''' 发送请求。 示例:插入一条JSON数据,到order索引中,文档类型是_doc, 文档id是1 <syntaxhighlight lang="java" highlight=""> PUT /order/_doc/1 { "id": 1, "status": 1, "total_price": 100, "create_time": "2019-12-12 12:20:22", "user" : { "id" : 11, "username": "tizi365", "phone": "13500001111", "address" : "上海长宁区001号" } } </syntaxhighlight> === 查询 === 根据文档 ID 查询一个文档。 语法: <syntaxhighlight lang="java" highlight=""> GET /{index}/{type}/{id} </syntaxhighlight> 示例: <syntaxhighlight lang="java" highlight=""> GET /order/_doc/1 </syntaxhighlight> 返回: <syntaxhighlight lang="java" highlight=""> { "_index" : "order", "_type" : "_doc", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "id" : 1, "status" : 1, "total_price" : 100, "create_time" : "2019-12-12 12:20:22", "user" : { "id" : 11, "username" : "tizi365", "phone" : "13500001111", "address" : "上海长宁区001号" } } } </syntaxhighlight> === 更新 === ==== 更新整个文档 ==== 与“索引文档”(插入文档)的语法一样,只要 ID 相同就会直接覆盖之前的文档。 ==== 更新文档局部 ==== 即:仅更新 json 文档的某些字段。 * ES '''底层文档是不可变的''',所以每次修改文档,本质上是'''创建一个新的文档,然后把老的文档标记成删除'''。 语法: <syntaxhighlight lang="java" highlight=""> POST /{index}/_update/{id} { "doc":{ // 在doc字段中指定需要更新的字段 // 需要更新的字段列表 } } </syntaxhighlight> 示例:更新order索引中,文档id等于1的json文档,更新status和total_price两个字段 <syntaxhighlight lang="java" highlight=""> POST /order/_update/1 { "doc":{ "status":3, "total_price":200 } } </syntaxhighlight> === 删除 === 语法: <syntaxhighlight lang="java" highlight=""> DELETE /{index}/{type}/{id} </syntaxhighlight> 示例: <syntaxhighlight lang="java" highlight=""> DELETE /order/_doc/1 </syntaxhighlight>
返回至“
ElasticSearch基础:文档CRUD
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息