Elasticsearch 優化

1. 避免使用腳本查詢來計算匹配。 推薦:建立索引時存儲計算字段。

2. 避免使用wildcard查詢(wildcard類似mysql中的like,和分詞完全沒有了關係)

3. 避免查詢大的結果集

4.增加 Refresh 時間間隔

為了提高索引性能,Elasticsearch 在寫入數據時候,採用延遲寫入的策略,即數據先寫到內存中,當超過默認 1 秒 (index.refresh_interval)會進行一次寫入操作,就是將內存中 segment 數據刷新到操作系統中,此時我們才能將數據搜索出來,所以這就是為什麼 Elasticsearch 提供的是近實時搜索功能,而不是實時搜索功能。

當然像我們的內部系統對數據延遲要求不高的話,我們可以通過延長 refresh 時間間隔,可以有效的減少 segment 合併壓力,提供索引速度。在做全鏈路跟蹤的過程中,我們就將 index.refresh_interval 設置為 30s,減少 refresh 次數。

同時,在進行全量索引時,可以將 refresh 次數臨時關閉,即 index.refresh_interval 設置為 -1,數據導入成功後再打開到正常模式,比如 30s。

http://10.167.200.195:9200/shoppinglogistics/_settings

{

"index" : {

"refresh_interval" : "30s"

}

}

5.在使用 Elasticsearch 過程中,應儘量避免大翻頁的出現。

正常翻頁查詢都是從 From 開始 Size 條數據,這樣就需要在每個分片中查詢打分排名在前面的 From + Size 條數據。協同節點收集每個分配的前 From + Size 條數據。協同節點一共會受到 N * ( From + Size )條數據,然後進行排序,再將其中 From 到 From + Size 條數據返回出去。

如果 From 或者 Size 很大的話,導致參加排序的數量會同步擴大很多,最終會導致 CPU 資源消耗增大。

6. Mapping中能設置成keyword ,優先設置為keyword。這樣lunece就不會大量的分詞,加長插入時間。

7. Elasticsearch兩種垃圾回收cms 適合內存8g以下的高內存也能用G1 需要內存比較高

################################CMS 回收

## GC configuration

-XX:+UseConcMarkSweepGC

-XX:CMSInitiatingOccupancyFraction=70 ##是指設定CMS在對內存佔用率達到70%的時候開始GC(因為CMS會有浮動垃圾,所以一般都較早啟動GC);

-XX:+UseCMSInitiatingOccupancyOnly

############################ G1

##-XX:+UseG1GC

##-XX:MaxGCPauseMillis=50 ##是控制預期的最高GC時長,默認值為200ms,如果線上業務特性對於GC停頓非常敏感,可以適當設置低一些。但是 這個值如果設置過小,可能會帶來比較高的cpu消耗。

####################################


核心類型

字符串:string,string類型包含 text 和 keyword。

text:該類型被用來索引長文本,在創建索引前會將這些文本進行分詞,轉化為詞的組合,建立索引;允許es來檢索這些詞,text類型不能用來排序和聚合。

keyword:該類型不需要進行分詞,可以被用來檢索過濾、排序和聚合,keyword類型自讀那隻能用本身來進行檢索(不可用text分詞後的模糊檢索)。

數指型:long、integer、short、byte、double、float

日期型:date

布爾型:boolean

二進制型:binary


{

"settings": {

"number_of_shards": 6,##創建分片數

"index.refresh_interval": "30s"##Refresh 時間間隔不寫的話默認是1

},

"mappings": {

"shoppinglogistics": {

"properties": {

"logisticsId": {

"type": "long"

},

"logisticsName": {

"type": "text",

"analyzer": "ik_smart",##分詞查詢

"search_analyzer":"ik_smart"##分詞查詢

},

"logisticsImgUrl": {

"type": "text"

},

"contactNumber": {

"type": "text"

},

"contactNamne": {

"type": "text",

"analyzer": "ik_smart",

"search_analyzer":"ik_smart"

},

"remarksDesc": {

"type": "text",

"analyzer": "ik_smart",

"search_analyzer":"ik_smart"

},

"logisticsStatus": {

"type": "text"

},

"createTime": {

"type": "text"

},

"createUserId": {

"type": "long"

},

"updateTime": {

"type": "text"

},

"updateUserId": {

"type": "long"

}

}

}

}

}


分享到:


相關文章: