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()方法已經被移除