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