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)逆文檔頻率:統計一個詞項在全部索引中的出現的頻率,是一個索引中文檔的總數的百分比,頻率越高,相關性得分越高
























免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM