elasticsearch使用bulk實現批量操作

2022-10-11 05:33:09 字數 2085 閱讀 4344

1、批量查詢

multi get 批量獲取

multi get api可以通過索引名、型別名、文件id一次得到乙個文件集合,文件可以來自同乙個索引庫,也可以來自不同的索引庫。

get /_mget

, ,

]}//可以指定具體的字段

get /_mget

, }]}

//獲取同索引同型別下的不同文件

get /lib/user/_mget

,

]}//也可以使用下面這種更為簡化的寫法

get /lib/user/_mget

bulk 批量操作

(1)比如,我這裡,在$es_home裡,新建一檔案,命名為requests。(這裡為什麼命名為request,去看官網就是)在linux裡,有無字尾沒區別。

[hadoop@djt002 elasticsearch-2.4.3]$ vi requests }

}}}

(2)執行命令

curl  -put  '192.168.80.200:9200/_bulk'   --data-binary @requests;

或  curl -xpost '192.168.80.200:9200/_bulk' --data-binary @requests;

bulk的格式:

}\n

\n (請求體)

action:(行為),包含create(文件不存在時建立)、update(更新文件)、index(建立新文件或替換已用文件)、delete(刪除乙個文件)。

create和index的區別:如果資料存在,使用create操作失敗,會提示文件已存在,使用index則可以成功執行。

metadata:(行為操作的具體索引資訊),需要指明資料的_index、_type、_id。

示例:

}

批量新增

post /lib2/books/_bulk

} \\行為:索引資訊

\\請求體}}

`}//返回結果

, "_seq_no": 0,

"_primary_trem": 1

"status": 200

}},

...

]}

批量刪除

刪除的批量操作不需要請求體

post /lib/books/_bulk

} //刪除的批量操作不需要請求體

} //請求體

} //沒有指定_id,elasticsearch將會自動生成_id

//請求體

} //更新動作不能缺失_id,文件不存在更新將會失敗

} //請求體

bluk一次最大處理多少資料量

bulk會將要處理的資料載入記憶體中,所以資料量是有限的,最佳的資料兩不是乙個確定的資料,它取決於你的硬體,你的文件大小以及複雜性,你的索引以及搜尋的負載。

一般建議是1000-5000個文件,大小建議是5-15mb,預設不能超過100m,可以在es的配置檔案(即$es_home下的config下的elasticsearch.yml)中,bulk的執行緒池配置是核心數+1。

bulk批量操作的json格式解析

bulk的格式:

}\n

\n (請求體)

不用將其轉換為json物件,直接按照換行符切割json,記憶體中不需要json文字的拷貝。

對每兩個一組的json,讀取meta,進行document路由。

直接將對應的json傳送到node上。

為什麼不使用如下格式:

將json陣列解析為jsonarray物件,在記憶體中就需要有乙份json文字的拷貝,寧外好友乙個jsonarray物件。

解析json陣列裡的每個json,對每個請求中的document進行路由。

為路由到同乙個shard上的多個請求,建立乙個請求陣列。

將這個請求陣列序列化。

誰在使用Elasticsearch

github github使用elasticsearch搜尋20tb的資料,包括13億的檔案和1300億行的 這個不用介紹了吧,碼農們都懂的,github在2013年1月公升級了他們的 搜尋,由solr轉為elasticsearch,目前集群規模為26個索引儲存節點和8個客戶端節點 負責處理搜尋請求...

ElasticSearch使用入門

es的安裝 啟動 cd.elasticsearch 2 4 3 bin elasticsearch bin elasticsearch d 後台執行 es安裝驗證 注意 預設啟動的時候es繫結的網路ip是本機127.0.0.1,只能通過這個ip訪問 兩種修改方式 1 修改config elastic...

ElasticSearch使用學習

elasticsearch是乙個基於lucene的搜尋服務,它通過倒排索引的方法提供了全文搜尋的能力。1 插入資料 elasticsearch中存放資料的為文件,有索引及型別名,如下插入兩文件 2 檢索文件 1 檢索id為1的文件 curl x get elasticsearch.in.netwa....