在最近一段关于ES的开发过程当中,难免踩了不少坑,如今我把一些注意点记录下来。性能
根据碰到的时间依次列举:code
1.字段类型
字段类型必定要在创建索引的时候就肯定, 由于一旦创建索引以后,索引中的一些字段类型是不容许修改,若是必定要修改,只能从新创建索引,很是恶心。所以必定要注意字段类型。索引
同时,字段类型最好本身指定来创建,尽可能不要使用自动创建索引。举个例子,你的字段类型多是Bigdecmal,可是他默认会是float。那么坑爹的点就来了,一旦你进行统计的SUM操做,你会发现获得的结果带了不少的小数。那是由于float转成double形成精度缺失,这里最好的解决方法就是不要让类型为float。内存
2.父子关系
在创建索引的时候,应该要理清索引之间的索引关系。如要进行父子文档关联的,应在创建索引的时候就要考虑到,否则后面只能重建索引。(一些常常变更的字段可能只能经过父子文档来进行查询)开发
3.冗余字段
为了追求高效的搜索速度,在ES中咱们应该是能避免连表就避免连表。由于使用父子文档来进行搜索,会影响搜索的性能。所以若是是一些不会变更的字段,而且搜索的时候须要的一些在其余表里面的字段可能冗余进来。这样搜索的时候,能够直接查询出来。文档
4.重建索引
通过验证,es能够新增字段,可是不能删除字段,修改字段,修改字段类型。因此要想上诉的一些不支持的操做,只能经过reindex重建索引来解决搜索
5.深度搜索
ES对深度搜索支持不是很好,因为他自己是将数据全放入内存来保证数据搜索的快速性。那么问题也来了,内存必有上限,当分页深度搜索的时候他是将以前的全部数据都放入内存才行。所以,当你使用ES来做为查询的时候,最好禁用深度搜索分页
未完待续。。。。float