項(xiàng)目中使用的es需要遷移,之前是由亞馬遜提供的服務(wù)現(xiàn)在改為使用運(yùn)維自建庫(kù),之前AWS提供的es版本是6.3,現(xiàn)在運(yùn)維自建的ES版本是7.6(PS:正常來(lái)說(shuō),即便是遷移,項(xiàng)目使用的數(shù)據(jù)庫(kù)版本應(yīng)該是一致的,這里我也很無(wú)奈)
代碼層面
jar包
6.3版本
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>6.3.2</version>
</dependency>
7.6版本
<!-- https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.6.1</version>
</dependency>
不要以為只需要把版本號(hào)從6.3.2改為7.6.1就萬(wàn)事大吉了,這倆jar包是互不兼容的
6.X的jar包都無(wú)法訪(fǎng)問(wèn)7.X的ES,在6.X版本的ES除了index外還可以用type作為條件,比如這樣的搜索語(yǔ)句:
GET /index/type/_search?q=user:kimchy
但是在7.X以后要求搜索語(yǔ)句不能使用type
GET /index/_search?q=user:kimchy
如果使用包含type的搜索語(yǔ)句訪(fǎng)問(wèn)7.X的ES會(huì)收到type字段已廢棄的異常提示,當(dāng)然,如果你在6.X中沒(méi)有使用type作為查詢(xún)條件,那么這個(gè)坑是不會(huì)踩的
Java使用elasticsearch-rest-high-level-client必須添加RequestOptions,RequestOptions不會(huì)改變ES的搜索過(guò)程及結(jié)果,只在應(yīng)用層進(jìn)行一些處理,如果沒(méi)什么要改的使用默認(rèn)構(gòu)造方法就行,如下所示
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
ES本身的配置參數(shù)
這是一個(gè)巨大的坑,公司項(xiàng)目都是采用容器化部署方案,使用的Kubernetes管理容器,恰好ES官方也支持這種部署模式,運(yùn)維直接拿來(lái)搭建,很多配置都使用的默認(rèn)參數(shù)
然而不對(duì)照官方文檔,忽視了默認(rèn)參數(shù)的變化
在6.X版本的ES每個(gè)索引有幾個(gè)分區(qū),幾個(gè)副本都可以通過(guò)number_of_shards和number_of_replicas分別設(shè)置,分區(qū)數(shù)量默認(rèn)5,副本數(shù)量默認(rèn)1,但是在7.6的版本中分區(qū)數(shù)量默認(rèn)為1,副本數(shù)量默認(rèn)為1,每個(gè)節(jié)點(diǎn)的JVM heap大小默認(rèn)1G
援引官方文檔:If ES_JAVA_OPTS is not defined, the Elasticsearch default heap size of 1Gi will be in effect.
如果在7.6的版本中仍然使用默認(rèn)參數(shù)去創(chuàng)建索引,數(shù)據(jù)分布在兩個(gè)node且JVM堆大小分別只有1G去存儲(chǔ)索引數(shù)據(jù),在數(shù)據(jù)量大,且有一定并發(fā)的情況下,ES的查詢(xún)速度是無(wú)法滿(mǎn)足生產(chǎn)環(huán)境需求的
我們需要在es中添加一個(gè)模板,以便在新建索引的時(shí)候使用可以滿(mǎn)足需求的配置
PUT _template/template_1
{
"index_patterns": ["te*", "bar*"],
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1
}
}
index_patterns設(shè)置匹配該模板的索引名稱(chēng),此模板適用于所有te和bar開(kāi)頭的索引,當(dāng)然也可以使用"index_patterns": ["*"]來(lái)匹配所有索引
settings設(shè)置了此模板下索引的默認(rèn)分區(qū)數(shù)量和副本數(shù)量,如果在創(chuàng)建索引時(shí)指定了分區(qū)數(shù)量和副本數(shù)量則不會(huì)使用默認(rèn)參數(shù)
模板中的設(shè)置只對(duì)以后創(chuàng)建的索引有效,對(duì)已有索引不生效