iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 2
1

Elasticsearch介紹

Elasticsearch使用的專有名詞,如index, documents等我不會特別翻成中文,我覺得反而更容易混淆
以下內文Elasticsearch簡稱為es


使用案例 (Use Cases)

  • 網站或app的搜尋功能 (搜尋框)
  • 儲存分析logs、指標或是資安事件資料
  • 當作儲存引擎來記錄商業工作流程
  • 管理、整合、分析空間資訊,實作成 GIS (geographic information system)

不管是不是類似於上述的任一種案例或用es解決新的問題,使用es的index、documents的方式都是一樣的


Elasticsearch的資料 (Data in Elasticsearch)

資料結構

並非像是關聯式資料庫(RDBMS)儲存一列一列的資料,而是可以儲存複雜的資料結構(透過序列化成JSON)
利用 inverted index(反向索引) 資料結構技術來達成快速的全文搜尋

documents and indices

每臺機器(實體或虛擬)可以運行多個es instance(實例),
一個es instance可視為一個node(節點),
一組node可構成一個cluster(集群),
一個es instance可以有多個index
一個index可以想成由一群documents所組成
一個document有很多fields(key-value pairs)

簡而言之,
fields->document->index->node(es instance)->cluster

有一種比擬方式可能比較容易理解一點,但是要注意使用上的特性還是有所不同,

項目 ES RDBMS
一個欄位 field column
一筆資料 document(JSON) row
結構(欄位/型別) mappings schema
包含資料和結構 index table

Note: 上述介紹的是es版本7之後

Dynamic Mapping

es有個功能是可以不設定 schema/mappings(fields),即可直接輸入資料
即使在還未建立index時,直接輸入資料,也會自動建立index
es會自動偵測資料的類型,對應至es所規範的資料類型(fields),並把這些fields加進index
Mapping Dynamic設定共有三種選項:

  • true (default): 即為上述的特性,會自動加入新的fields
  • false: 忽略新的fields
  • strict: 如果有未定義的fields,則會丟出例外(throw an exception)

一個field,多個data types

這也是es其中一個特性,舉個例子
某個欄位如果後續是需要拿來做全文檢索的欄位,則會指定他的型別為text
但又有些時候這個欄位是需要拿來後分類或排序,則會定義第二個型別為keyword
後續在介紹mappings時會更加深入的介紹


小小新手,如有理解錯誤或寫錯再請不吝提醒或糾正


Reference

What is Elasticsearch?
Inverted Index
Dynamic field mapping


上一篇
Elastic Stack第一重
下一篇
Elastic Stack第三重
系列文
Elastic Stack武學練功坊5

尚未有邦友留言

立即登入留言