新增文檔(不指定文檔ID)
新增文檔(指定文檔ID)
通過文檔ID獲取文檔
通過文檔ID更新文檔
通過文檔ID刪除文檔
批量新增文檔
批量GET文檔
搜索文檔
????????由于ES的主要功能就是對海量文檔進(jìn)行搜索,提供了豐富的搜索接口和語法,所以單獨使用一篇文章介紹ES的搜索功能。
備注:
? ? ? ? 1、指定ID生成索引文檔適合從外部數(shù)據(jù)源導(dǎo)出數(shù)據(jù)到ES的場景藤滥,因為外部數(shù)據(jù)源中存在數(shù)據(jù)ID了,業(yè)務(wù)上可能也想保持ID不變,所以在數(shù)據(jù)進(jìn)入ES的時候可以使用已經(jīng)存在的ID莲镣。但是,指定ID沒有讓ES自動生成ID性能好涎拉,因為ID需要查看指定的ID是否已經(jīng)存在瑞侮。
? ? ? ? 2、Bulk寫入比單條寫入性能高很多鼓拧。Bulk對傳輸?shù)臄?shù)據(jù)結(jié)構(gòu)做了優(yōu)化半火,沒有使用JSONArray的形式,是因為對JSONArray進(jìn)行格式化時需要額外占用和接收數(shù)據(jù)一樣大的內(nèi)存季俩,而已換行來分割數(shù)據(jù)更高效钮糖,也不用占用額外的內(nèi)存。
? ? ? ? 3酌住、Bulk Request會加載到ES內(nèi)存里店归,如果太大的話阎抒,性能反而會下降,因此需要反復(fù)嘗試一個最佳的bulk size娱节。一般從1000~5000條數(shù)據(jù)開始挠蛉,嘗試逐漸增加。另外肄满,如果看大小的話谴古,最好是在5~15MB之間。
? ? ? ? 4稠歉、批量GET比單條GET更高效掰担,由于只需要一次網(wǎng)絡(luò)請求,減少了網(wǎng)絡(luò)開銷怒炸。盡量使用批量GET带饱。
? ? ? ? 5、由于ES底層是基于Lucene的阅羹,Lucene中沒有type的概念勺疼,所以ES對索引中的每個文檔維護(hù)了一個屬性,屬性值為文檔所在的type捏鱼。ES在一個索引中只維護(hù)了一個索引結(jié)構(gòu)执庐,這個結(jié)構(gòu)就是該索引中所有type下屬性的并集。所以导梆,一個索引中同名屬性的類型必須一樣轨淌,即使在不同type下也得保持類型一樣。
? ? ? ? 6看尼、同樣是由于ES底層是基于Lucene的递鹉,在Lucene中Segment一旦被生成,就不能修改藏斩。所以ES的刪除和更新都不是修改原來硬盤上的數(shù)據(jù)躏结,而是重新生成一份數(shù)據(jù)。當(dāng)對Segment做合并時狰域,會刪除舊數(shù)據(jù)媳拴。