2018年Q2, Elasticsearch 更新到6.2版本, 6.3版本还未正式发布,如果准备在生产环境使用,比较推荐使用较老的5.6.x版本或2.x版本,一方面比较稳定、另外资料也比较多

如果使用Java技术栈,你很可能会使用Spring Boot全家桶,当前Spring Boot更新到2.x版本, 默认spring-boot-starter-data-elasticsearch 默认的ES版本为5.6.9;如果你仍然使用Spring Boot 1.x版本,那么默认的Elastisearch版本为2.x

客户端

Java技术栈目前有三种可以选择 Node Client, Transport Client, Rest API, 需要注明的是,官方已经标明NodeClient 已经过期,Transport Client 将在7.x版本开始不再支持, 最终会在7.x 统一到Rest API。目前Transport Client使用范围比较广;Rest API方式兼容性较好;除非在In-memory模式下运行单元测试,否则不推荐NodeClient

单测测试

如果能使用in-memory 这种方式,那么可以很轻松保证可重测性,很可惜的是,Elasticsearch 5.x版本开始,官方已经开始不证支持im-memory这种方式,而且从Spring Boot官方文档来看,Spring Boot 2.x版本的文档中已经去掉了In memory这种方式的描述

升级和迁移

2.x版本数据可以直接迁移到 5.x; 5.X版本的数据可以直接迁移到6.x; 但是2.x版本数据无法直接迁移到6.x

总结

ES 2.x版本

优点:

1. Java技术栈, spring-boot-starter-data-elasticsearch 支持in-memory方式启动,单元测试开箱即用

2. 当前线上运行的主流版本, 比较稳定

缺点:

1. 版本较老,无法体验新功能,且性能不如5.x

2. 后期升级数据迁移比较麻烦

3. 周边工具版本比较混乱;Kinbana等工具的对应版本需要自己查

ES 5.x版本

优点

1. 版本相对较新,性能较好官方宣称索引吞吐量提升在25%到80%之间,新的数据结构用于存储数值和地理位置字段,性能大幅提升;5.x版本搜索进行了重构,搜索聚合能力大幅提高

2. 周边工具比较全,版本号比较友好。 ES官方在5.x时代统一了 ELK体系的版本号

3. 升级到6.x也比较方便

缺点:

1.  官方宣布已不支持In-Memory模式和Node Client已失效, 如果需要使用in-memory方式单测,需要自己手动配置ES版本、spring-data-elasticsearch版本、打开http访问开关等配置,并行使用REST API访问