更換ElasticSearch版本6.3-7.6導(dǎo)致的問(wèn)題

項(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ì)已有索引不生效


參考網(wǎng)站

Elasticsearch Reference 7.6

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容