zoukankan      html  css  js  c++  java
  • Elasticsearch学习笔记(七)document小结

    一、生成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文件内的数据
                   
            Image[4]_thumb

                2.document的读请求处理过程

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

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


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


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



    Image(1)[4]_thumb
               

                3.document相关性打分

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

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


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























  • 相关阅读:
    WinForm 资源文件的使用
    php 常量
    netbean使用技巧
    netbeans 7安装xdebug调试php程序
    eclipse 开发技巧
    asp.net 获取客户机IP地址
    NameValueCollection详解
    Paramics插件编程进程间通讯
    Paramics API编程配置
    windows查询端口占用
  • 原文地址:https://www.cnblogs.com/wshcn/p/8150540.html
Copyright © 2011-2022 走看看