天天看點

Elasticsearch 字段類型之 Range 經典應用場景

作者介紹:

李猛(ynuosoft),Elastic-stack 産品深度使用者,ES 認證工程師,2012 年接觸 Elasticsearch,對 Elastic-Stack 開發、架構、運維等方面有深入體驗,實踐過多種 Elasticsearch 項目,最暴力的大資料分析應用,最複雜的業務系統應用;業餘為企業提供 Elastic-stack 咨詢教育訓練以及調優實施。

現狀背景

背景需求

産品資訊,資料量在幾個 TB 級以上,每種工業産品都有大量的标簽資訊,标簽資訊多數屬于數值類型,且是屬于範圍那種資料,如某安防頭盔尺寸是 L 碼,配合适合範圍55cm~65cm,對于此種資料查詢,若标簽屬性較少,還可以走傳統的資料庫索引查詢,若标簽屬性很多,則顯然很吃力。

原有方案

企業技術負責人入行IT很早,原始的技術棧組合是 Sqlserver+Clucene 組合,原始工業産品資訊存儲在資料庫中,搜尋查詢走 Clucene,有很多問題,如下:

• 自主包裝 Clucene 核心庫,架構與業務代碼深度耦合,單次需求變更都需要釋出版本,不具備穩定性

• 索引實時更新幾乎沒有,屬于離線更新,且更新一次周期很長

• Clucene 版本很舊,對于搜尋的支援還是早期分詞階段,僅支援反向索引

• 對于範圍搜尋,采用的是分詞方式實作,不能做到精确的範圍搜尋,這個是最核心迫切需要的功能

• 基于 Clucene 開發的搜尋應用 ,索引資料太大,客戶花很多精力實作分布式,且效果不理想。

Elasticsearch 字段類型之 Range 經典應用場景

技術實作

相比傳統關系型資料庫,Elasticsearch 實作的方式更加直接高效。

Range類型設定

Elasticsearch 支援多種範圍類型

• 數值類型

• 日期類型

• IP位址類型

Elasticsearch 字段類型之 Range 經典應用場景

若在關系資料庫中則每個标簽屬性需要2個字段表示範圍值。

Range資料填充

填充範圍資料,有多種表達式

• 大于,gt

• 小于,lt

• 大于等于,gte

• 小于等于,lte

Elasticsearch 字段類型之 Range 經典應用場景

Range資料查詢

查詢文法很簡單,不過查詢的關聯關系有幾種

• 相交,查詢條件的範圍與字段資料範圍有交叉,預設使用

• 包含,查詢條件的範圍值,包含字段的資料範圍值

• 反包含,與包含相反,查詢條件的範圍值包含在字段的資料範圍之内。

Elasticsearch 字段類型之 Range 經典應用場景

若在關系資料庫中查詢相交則需要2組表達式合并才可以,若多個标簽屬性同時查詢,則更複雜。

技術原理

在跟客戶企業溝通中,發現比較重要的資訊是,技術負責人對于搜尋領域的知識認知比較陳舊,Lucene 發展早已不僅僅是反向索引,已經支援了很多索引算法,且應用領域也早就突破分詞搜尋,Elastic 産品版本近年更新很快,相應的 Lucene 也一樣。

為什麼選擇 Elasticsearch 替代關系型資料庫做範圍查詢最合适呢?原因如下:

産品功能

Elasticsearch 字段類型之 Range 經典應用場景

Elasticsearch 從 2016 年引入了 BKD 樹算法,在建構索引時會依據字段類型設定不同的算法實作,無需要人工幹預,隻要設計正确的類型,如下

• 若是字元類型的,基于 Inverted Index 建構索引

• 若是數值類型,基于 BKD-Tree 建構索引

算法介紹

Elasticsearch 字段類型之 Range 經典應用場景

• Bkd-Tree 作為一種基于 K-D-B-tree 的索引結構,用來對多元度的點資料 (multi-dimensional point data) 集進行索引。關于建構 BKD-Tree 過程不在本文探讨範圍内,詳細可以查閱更專業的論文。

• 從前面客戶需求描述得到,客戶的工業産品資訊有很多範圍類型的标簽屬性,在 Elasticsearch 中,僅需要建構一個索引即可滿足高效查找,且預設是所有标簽屬性自動構造索引。

• 想想看若基于傳統關系型資料庫實作,每标簽屬性都需要至少 2 個字段,且多個标簽屬性要任意組合查詢,不能通過一個索引實作,需要建立很多索引,查詢時還必須保持最左原則;

• BKD-Tree 索引查詢效率比關系型資料庫的 BTree 更勝一籌。

結語

經驗總結

• Elastic 核心基于 Lucene,功能發展非常成熟,普通使用者沒有必要基于 Lucene 自主開發搜尋應用,隻需要關注自己的業務實作。

• 資料産品的競争更多的是産品背後實作算法的競争,對于我們來說需要經常更新自己的知識體系,選擇最合适的技術方案響應變化。

• DB 與 ES 混合應用已經成為目前潮流,Elastic 已經成為目前查詢應用标配

• ES 用的好,下班必須早

聲明:本文由原文作者“李猛”授權轉載,對未經許可擅自使用者,保留追究其法律責任的權利。
Elasticsearch 字段類型之 Range 經典應用場景

阿裡雲Elastic Stack

】100%相容開源ES,獨有9大能力,提供免費X-pack服務(單節點價值$6000)

相關活動

更多折扣活動,請

通路阿裡雲 Elasticsearch 官網 阿裡雲 Elasticsearch 商業通用版,1核2G ,SSD 20G首月免費 阿裡雲 Logstash 2核4G首月免費
Elasticsearch 字段類型之 Range 經典應用場景
Elasticsearch 字段類型之 Range 經典應用場景