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"
}
}
}
}
}
閱讀更多 泡泡糖就是糖 的文章