Elasticsearch6.0 Java API 重大变化
最近做的项目中用到了Elasticsearch,ES的版本迭代速度非常快,在此记录一下官方公布的6.0版本的重大变化
setSource()方法需要XContentType
以前setSource方法和其他的接受byte/string类型作为对象源的方法,可以不需要指定XContentType,
自动检测内容类型已经不再使用,现在当提供bytes或者string类型的source的时候,这些方法需指定XContentType
作为附加参数
DeleteByQueryRequest需要一个明确的查询语句(query)
在Elasticsearch以前的版本中,DeleteByQueryRequest允许不设置一个明确的query,
默认使用match_all语句(query)并且所有文档会被删除,从6.0.0版本开始,
DeleteByQueryRequest需要设置一个明确的匹配语句(query)
InternalStats和Stats的 getCountAsString()方法被移除
- count值在统计聚合中表示的是命中的文档的count值,这个值不需要格式化为String的版本,
这个方法在5.4版本不赞成使用,
- 如果需要String类型的count值,使用String.valueOf(getCount())代替
ActionRequestBuilder#execute返回值改为ActionFuture
当通过request builders(client.prepareSearch().execute())来发送一个请求时,
可能会去再次调用 addListener 返回 ListenableActionFuture。伴随此次变化,返回值被现在
作为client方法返回的统一的ActionFuture取代,因此,可能不需要联系监听器的期望,
execute方法接受一个监听器(listener)作为参数来取代之前的方法
Terms.Order和Histogram.Order类被BucketOrder取代
terms、histogram、date_histogram等聚合的代码已经重构,去使用排序桶的公共代码。
必须使用BucketOrder类来取代Terms.Order和Histogram.Order。
必须调用Bucket.Order类的静态方法来代替直接访问Order内部实例(BucketOrder.count(boolean),BucketOrder.aggregation(String,boolean))的做法。
使用BucketOrder.key(boolean) 依靠 _term 来排序 terms聚合的桶(buckets)
getTookInMillis()方法在BuilkReponse、SearchResponse和TermVectorResponse中移除
在BulkResponse、SearchResponse和TermVectorResponse类中,getTookInMillis()方法已经被移除,
getTookInMillis()方法很早就被getTook().getMillis()取代了
GetField和SearchHitField被DocumentField取代
原GetField和SearchField类有相同的成员变量和方法,现在统一为DocumentField
一些Aggregation的class文件所属包变化
- 一些关于排序聚合(geo_distance,date,ip)的衍生class文件被移动到
org.elasticsearch.search.aggregations.bucket.range包下。
- 原所属org.elasticsearch.search.aggregations.bucket.terms.support包下的class文件
移动到org.elasticsearch.search.aggregations.bucket.terms包下
- Filter Aggregation 的类文件 已经移动到org.elasticsearch.search.aggregations.bucket.filter包下
PercentileRanksAggregationBuilder构造函数变化
百分位排行聚合,现在需要将希望排序的非空非null的double数组,传入builder的构造函数,
而不是通过setter来配置,以前对应的setter values()方法已经被移除