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"

}

}

}

}

}


分享到:


相關文章: