一、生成document id


1、自动生成document id

                自动生成的id,长度为20个字符,URL安全,base64编码,GUID,分布式系统并行生成时不可能会发生冲突
               
                 语法:POST  /index/type

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/id
               
PUT /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路由含义:

                      表示新增document时es如何决定将其存放在index的哪个shard上,查询时es又是如何在某个shard上查询指定的document。

2、路由算法:

                       路由公式:
                                shard = hash(routing) % number_of_primary_shards       (结果在0~number_of_primary_shards-1之间)
                        注意:primary shard的数量是固定不变的
                                routing : 每次增删改查一个document时都会带来的一个routing number,默认为document的_id,也可以自定义routing值.通过在PUT请求内指定routing参数值。
                            如:put /index/type/id?routing=user_id
                               number_of_primary_shards:primary shard的数量

四、document的增删改查原理


1、document增删改的请求处理过程

  (1)协调节点接收来自客户端的document增删改查请求


(2)协调节点根据路由算法将document的增删改查请求分发给primary shard


(3)primary shard接收到来自协调点的请求后将请求写入transaction log 并将document写入内存缓存内。内存缓存每隔一秒将document数据同步至文件系统缓存内。增删改请求在primary shard上处理成功后,该请求将并行发送到其他的replica shard上。当transaction log同步至所有的分片上后将结果通知给客户端。

                (4)transaction log文件每隔30分钟或者文件过大的时候会触发es的冲洗flush过程。es的冲洗将文件系统缓存内的数据同步至磁盘并将transaction log清空。内存缓存内的数据也将同步至文件系统缓存并刷新到磁盘内。

(5)tansaction log文件还每隔5秒将写请求数据同步至磁盘。

                (6)删除请求和更新请求会将document在.del文件内的数据标记为deleted,es周期性清除del文件内的数据
               

2.document的读请求处理过程

           (1)客户端将读请求发给协调点

(2)协调点将读请求打到所有的shard上,每个shard独立执行查询,并根据查询结果创建一个按照相关性得分排序的优先队列


(3)每个shard处理完成后将优先队列内的前10个相关性得分最高的返回给协调点


(4)协调点根据各个shard返回的数据创建一个按照相关性得分排序的有限队列,并将前10个得分最高的作为hits返回给客户端。



           

            3.document相关性打分

es 默认使用的排序算法是tf/idf(词频/逆文档频率), 最后的得分是tf-idf得分与其他因子比如(短语查询中的)词项接近度、(模糊查询中的)词项相似度等的组合

(1)词频:统计一个词项在文档中出现的次数,频率越高,相关性得分越高


                  (2)逆文档频率:统计一个词项在全部索引中的出现的频率,是一个索引中文档的总数的百分比,频率越高,相关性得分越高























Elasticsearch学习笔记(七)document小结的更多相关文章

  1. Elasticsearch学习笔记一

    Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...

  2. python3.4学习笔记(七) 学习网站博客推荐

    python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...

  3. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  4. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  5. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  6. elasticsearch学习笔记——相关插件和使用场景

    logstash-input-jdbc学习 ES(elasticsearch缩写)的一大优点就是开源,插件众多.所以扩展起来非常的方便,这也造成了它的生态系统越来越强大.这种开源分享的思想真是与天朝格 ...

  7. Go语言学习笔记七: 函数

    Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...

  8. iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】

    iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...

  9. 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整

    今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...

  10. Linux学习笔记(七) 查询系统

    1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...

随机推荐

  1. JDBC连接MariaDB:数据传输加密

    环境:win7+springboot+mybatis+mariadb 需求说明: 未做安全加固前用wireshark抓包: 可以很明显看到用户名.数据库和 SQL,这种情况是有安全风险的. 1.下载o ...

  2. Vue项目中,要保证某个部分的高度,应该怎么设置

    .icons overflow: hidden height: padding-bottom: % background: green

  3. java实现http请求

    String apiUrl = "https://api.seniverse.com/v3/weather/now.json?key=" + key + "&lo ...

  4. 将Emacs Org任务树导出至Freeplane思维导图

    Emacs Org mode作为实施GTD方法的任务与项目管理工具是极为强大和有效的.尽管如此,我在使用过程中亦发现了一个因Emacs文本操作模式而难以解决的情况,即对于具有复杂结构与大量细节的项目, ...

  5. PHP二维数组按某个字段排序

    //准备 二维数组 //按一个字段排序 foreach($rank as $key=>$val){ $dos[$key] = $val['timelength']; } array_multis ...

  6. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

    1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...

  7. 咸鱼入门到放弃5--Session和Cookie

    保存会话数据的两种技术 1.Cookie Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器.当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去. ...

  8. PHP unicode与普通字符串的相互转化

    unicode转字符串 方法一:json /** * unicode转字符串,通过json转化 * @param $str * @return string */ function unicode_d ...

  9. web服务-3、epoll高效率实现并发服务器

    知识点: 之前写的四种方法实现并发服务效率都还是低,早期的服务器采用的是select和poll方式,select这种方式的特点是轮询所有套接字去一个个看有没有事件发生,但是装套接字的列表长度是有限制的 ...

  10. TCP/IP协议、HTTP协议、SOCKET通讯详解

    1.TCP连接TCP(Transmission Control Protocol) 传输控制协议.TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握确认建立一个连接.位码即tcp标志位 ...