一、生成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. C#+EntityFramework编程方式详细之Database First

    Database First “Database First”模式即“数据库优先”,其实Database First 与Model First 很类似,只不过一个是有数据可一个是创建数据库,具体的操作 ...

  2. js中setTimeout() 时间参数为0

    当看到下面 这种setTimeout 设置为0 写法的时候一脸懵逼,完全没用过. var fuc = [1,2,3]; for(var i in fuc){ setTimeout(function() ...

  3. svn"database disk image is malformed"错误解决

    本文是svn出现类似如下问题的两种解决方案. svn: E200030: database disk image is malformed 一.最简单的方法,复制其它人的.svn/wc.db替换. 二 ...

  4. P4147 玉蟾宫 二维DP 悬线法

    题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...

  5. xlrd模块;xlwt模块使用,smtp发送邮件

    先安装 pip3 install xlwt pip3 install xlrd import xlwt, xlrd from xlrd.book import Book from xlrd.sheet ...

  6. 深入理解Java虚拟机阅读心得(二)

    垃圾收集 程序计数器.虚拟机栈.本地方法栈三个区域随线程而生,随线程而灭:这几个区域的内存分配和回收都具备稳定性,不需要过多的考虑回收的问题.而Java堆和方法区则不一样. Java堆中存储了几乎所有 ...

  7. CF 960 G

    难受的1b,怎么会这样 先去学写一发 NTT 大概说一下斯特林数

  8. Selenium爬取电影网页写成csv文件

    绪论 首先写这个文章的时候仅仅花了2个晚上(我是菜鸟所以很慢),自己之前略懂selenium,但是不是很懂csv,这次相当于练手了. 第一章 环境介绍 具体实验环境 系统 Windows10教育版 1 ...

  9. 项目导入之后报错:The import javax.servlet cannot be resolved

    项目导入之后报错:The import javax.servlet cannot be resolved 解决方法:在Eclipse中,右击项目,选择Build Path->configure ...

  10. 【Tomcat】Tomcat配置JVM参数步骤

    这里向大家描述一下如何使用Tomcat配置JVM参数,Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机.您可以选择自己的需要选择不同的操作系统和对应的JDK ...