一、生成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)詞頻:統計一個詞項在文檔中出現的次數,頻率越高,相關性得分越高