領先一步
VMware 提供訓練和認證,以加速您的進度。
了解更多Spring Data Elasticsearch 是 2020.0 版本中附帶的社群模組之一。 我們很榮幸能代表這些日子裡負責大部分繁重工作的 P.J. Meisch 分享他對目前版本的見解。
先前的版本包含內部程式碼結構和 API 的重大修改,而 Spring Data Elasticsearch 的 2020.0 版本則專注於修正錯誤和新增功能。
總共修正了 23 個錯誤,並解決了 81 個其他問題。 Spring Data Elasticsearch 現在是使用實際的 Elasticsearch 版本 7.9.3 建置的。
這篇部落格文章介紹了在 4.1 版本中新增到 Spring Data Elasticsearch 的最重要功能。
此版本新增了從應用程式內部進行索引管理所缺少的元件,特別是別名處理和索引範本。
別名處理
IndexOperations
介面中用於別名處理的方法已重新設計,以遵循 Elasticsearch API 進行別名處理。 我們現在也提供 Elasticsearch API 中所有別名動作。
索引範本
Elasticsearch 中的索引範本定義了索引名稱模式組合中的對應、設定和別名資訊。 因此,您可以定義索引名稱模式 (例如 "log-*") 的範本,並且每當建立索引 (例如 "log-2020-11-01") 時,預先定義的對應、設定和別名設定會自動套用至索引。
Spring Data Elasticsearch 現在支援索引範本的管理,因此用於建立索引時的對應和設定的相同實體註解也用於定義索引範本。
透過此索引管理,現在可以實作索引命名策略,例如具有基於時間的索引名稱的滾動索引。
索引管理功能現在可用於反應式設定和非反應式設定。
在 Spring Data Elasticsearch 中定義查詢的可能性之一是使用 Criteria
查詢 API。 它允許使用流暢、類似語言的語法
Criteria criteria = new Criteria("lastName").is("Smith")
.and("firstName").is("Emma");
Query query = new CriteriaQuery(criteria);
到目前為止,無法使用此 API 建置巢狀查詢。 如果使用者想要搜尋所有姓氏為Smith且名字為Emma或Lucy的人,則可以使用以下查詢
Criteria criteria = new Criteria("lastName").is("Smith")
.and("firstName").is("Emma")
.or("firstName").is("Lucy");
但這會傳回Emma Smith,而不是Lucy,因為這會對應到「必須是 Smith,並且必須是 Emma,並且應該是 Lucy」。
我們現在支援巢狀條件定義
Criteria emmaOrLucy = new Criteria()
.or("firstName").is("Emma")
.or("firstName").is("Lucy");
Criteria criteria = new Criteria("lastName").is("Smith")
.subCriteria(emmaOrLucy);
有了這些子條件,現在可以建置任意巢狀的複雜查詢,而無需使用 NativeSearchQuery
或 StringQuery
。
Spring Data Elasticsearch 現在終於支援 geo_shape 資料類型。 如果實體的屬性衍生自新引入的 GeoJson
介面,或者使用 @GeoShapeField
註解進行註解,則現在會將該屬性解譯為 geo_shape 屬性。
Spring Data Elasticsearch 提供以下 GeoJson
介面的實作
GeoJsonPoint
GeoJsonMultiPoint
GeoJsonMultiLineString
GeoJsonPolygon
GeoJsonMultiPolygon
GeoJsonGeometryCollection
對於使用 @GeoShapeField
註解但未實作 GeoJson
的屬性,必須提供自訂轉換器來轉換為 Document
物件或 String
,並從 Document
物件或 String
轉換。
在以下位置會考量 geo_shape 屬性
1. 對應定義
定義為 geo_shape 的屬性將以類型 geo_shape 寫入索引對應,以便 Elasticsearch 識別資料為 GeoJson 資料。
2. 屬性對應
當具有 geo_shape 類型屬性的文件寫入 Elasticsearch 時,該屬性將轉換為相應的 GeoJSON 表示法,並且在讀取搜尋回應時,將實例化適當的 GeoJson
衍生類型。 因此,geo_shape 類型可以像實體中的任何其他屬性類型一樣使用。
3. 條件查詢
可以使用 NativeSearchQuery
和 QueryString
類別建置 geo_shape 屬性的查詢;此外,Criteria
介面現在具有建置此類查詢的方法,例如
CriteriaQuery query = new CriteriaQuery(new Criteria("area").intersects(geoShape));
其中 area 是 geo_shape 屬性,而 geoShape 是 GeoJson
類型的某個變數。
geo_shape 條件的 Criteria
方法為 within、intersects、isDisjoint 和 contains,與 Elasticsearch 為 geo_shape 查詢提供的相同。
在 4.0 版中引入的稽核支援現在在反應式堆疊中也完全支援。
當具有內部命中數的巢狀查詢時,內部命中數現在會傳回到 SearchHit
物件中
這是 Spring Data Elasticsearch 4.1 中主要變更的簡短概觀,希望您使用愉快!