在前面的演示中,我們都是基於一次http查詢,每次查詢都要建立http的三次握手請求,這樣比較耗費性能!因此ES給我們提供了基本的批量查詢功能,例如如下的查詢,注意里面的index是可以任意指明的,不需要都一致
【01】批量查詢之_mget操作,如下查詢表示指定同時查詢索引testdb下的兩個type(job1和job2)里面的數據:注意我們可以在這里指定不同的索引,例如testdb1,testdb2;另外這里要指定doc關鍵詞,表示我查詢的是一個文檔:
【02】查詢同一個index下面不同type的數據,我們直接在url地址中先指明index為testdb,然后在里面就不用指明了:
【03】如果連type都是一樣的,那就只需要查詢id了,依然不要忘記使用doc關鍵詞
我們還可以基於上面的情形繼續簡寫,下面這種寫法就更加簡便了
需要注意的是:上面使用docs指定時,它對應的value是一個數組,數組里面的每個元素都是字典。
【04】ES的bulk批量操作 來看看網絡上的一張截圖:
相當於就是使用了元數據來完成數據的批量導入,每導入一條數據,由兩行構成,一條是元信息,另一條是數據行,來看看筆者實際的例子:
注意上面的數據格式一定要做成一行,不要優化成json數據格式
示例1:使用POST來完成bulk操作演示:藍色的為元數據信息:
{"index":{"_index": "lagou", "_type": "job", "_id":"1"}} {"title": "python爬蟲開發工程師","salary_min": 15000,"city": "北京","company":{"name": "百度","company_adr": "北京市軟件園3棟"},"publish_date": "2017-4-16","comments":14} {"index":{"_index": "lagou", "_type": "job2", "_id":"2"}} {"title": "python django開發工程師","salary_min": 30000,"city": "成都","company":{"name": "","company_adr": "杭州軟件園3棟"},"publish_date": "2017-4-16","comments":55}
運行截圖如下所示:記住在上面使用POST _bulk
我們去head插件中看看,可以看到它自動為我們創建了所以index,而且還插入了兩條數據:
注意事項:
關於bulk操作的解說: 1.第一行是操作,例如index操作,后面的value是元數據,指明index操作是針對哪個索引,哪個type,哪個id進行的; 2.第二行才是數據 但是要注意的是delete操作只有一行數據,因為只需要提供一個id即可 下面的create操作和update操作都是兩行數據。
示例如下: