文档核心元数据
- _index:说明了一个文档存储在哪个索引中,同一个索引下存放的是相似的文档(文档的field多数是相同的,可以由不同的field,但不建议使用),索引名必须是小写的,不能以下划线开头,不能包含括号。
- _type:表示文档属于索引中的哪个类型,一个索引下只能有一个type(6.0版本之前可以有多个type),类型名可以是大写也可以是小写的,不能以下划线开头,不能包含括号。
- _id:文档的唯一标识,和索引、类型组合在一起唯一标识了一个文档,可以手动指定值,也可以由Elasticsearch来生成这个值。
文档id生成方式
手动指定:通常是把其他系统的已有数据导入到Elasticsearch时,选择手动指定。
PUT /index/type/66
由 Elasticsearch 生成 id 值:Elasticsearch生成的id生成长度为20个字符,使用的是 base64 编码,URL安全,使用的是 GUID 算法,分布式下并发生成 id 值时不会冲突。
POST /index/type
_source 元数据分析
添加文档时 request body 中的内容,默认_source返回的是所有字段的数值。
指定返回的结果中含有哪些字段:
GET /index/type/1?_source=name
详解及用法查看:Elasticsearch Java API 的使用(11)—优化索引创建之mapping设置
文档修改、删除原理解析
改变文档内容原理解析
替换方式:
PUT /lib/user/4
{
"first_name": "Jane",
"last_name": "Lucy",
"age": 24,
"about": "I like to collect rock albums",
"interests": ["music"]
}
修改方式(partial update):
POST /lib/user/4/_update
{
"doc": {
"age": 26
}
}
删除文档:标记为deleted,随着数据量的增加,Elasticsearch会选择合适的时间删除掉。
PUT和POST更新数据的区别
- post方式比put方式网络数据传输的次数要少,从而提高性能。post方式从查询文档到修改文档再到创建新的文档都是在Elasticsearch内部实现的。
- post请求链路比put要少,post方式发生并发冲突的可能性降低。