一、生成document id
1、自动生成document id
POST /test_index/test_type{"test_content": "my test"}返回结果:{"_index": "test_index","_type": "test_type","_id": "AVp4RN0bhjxldOOnBxaE","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"created": true}
2、手动指定document id
语法:PUT /index/type/idPUT /test_index/test_type/2{"test_content": "my test"}
二、document的创建和删除
1、document的全量替换
(1) 语法与创建文档是一样的,如果document id不存在,那么就是创建;如果document id已经存在,那么就是全量替换操作,替换document的json串内容(2)document是不可变的,如果要修改document的内容,第一种方式就是全量替换,直接对document重新建立索引,替换里面所有的内容
(3)es会将老的document标记为deleted,然后新增我们给定的一个document,当我们创建越来越多的document的时候,es会在适当的时机在后台自动删除标记为deleted的document
2、document的强制创建
( 1)创建文档与全量替换的语法是一样的,有时我们只是想新建文档,不想替换文档,如果强制进行创建呢?
(2)PUT /index/type/id?op_type=create,PUT /index/type/id/_create
3、document的删除
(1)DELETE /index/type/id
(2)不会理解物理删除,只会将其标记为deleted,当数据越来越多的时候,在后台自动删除
三、document路由
1、 document路由含义:
2、路由算法:
四、document的增删改查原理
1、document增删改的请求处理过程
(1)协调节点接收来自客户端的document增删改查请求
(2)协调节点根据路由算法将document的增删改查请求分发给primary shard
(3)primary shard接收到来自协调点的请求后将请求写入transaction log 并将document写入内存缓存内。内存缓存每隔一秒将document数据同步至文件系统缓存内。增删改请求在primary shard上处理成功后,该请求将并行发送到其他的replica shard上。当transaction log同步至所有的分片上后将结果通知给客户端。
(5)tansaction log文件还每隔5秒将写请求数据同步至磁盘。
2.document的读请求处理过程
(2)协调点将读请求打到所有的shard上,每个shard独立执行查询,并根据查询结果创建一个按照相关性得分排序的优先队列
(3)每个shard处理完成后将优先队列内的前10个相关性得分最高的返回给协调点
(4)协调点根据各个shard返回的数据创建一个按照相关性得分排序的有限队列,并将前10个得分最高的作为hits返回给客户端。
3.document相关性打分
es 默认使用的排序算法是tf/idf(词频/逆文档频率), 最后的得分是tf-idf得分与其他因子比如(短语查询中的)词项接近度、(模糊查询中的)词项相似度等的组合
(1)词频:统计一个词项在文档中出现的次数,频率越高,相关性得分越高