Elasticsearch - The first sight

Introduction

Elasticsearch這service based on Apache Lucene, 用 Java語言開發,主要功能是作search 和 log analysis。屬於 NoSQL database,資料是可以unstructured的 ,無法用SQL語法去query它。

基本觀念可從下方連結看slides 學ES
What is index? shard?
index 可以是裡面的類database,也是儲存文件的這個動作,而反向索引 inverted index是適合全文檢索的索引結構。
ES的index是由好幾個shard組成,負責文件的儲存以及索引。

對文字做分詞(tokenization)和正規化(normalization)過程叫做analysis。
Analysis 由analyzer做Character filters 像是轉換符號變文字、去除多餘文字, Tokenizer將字串切成有意義的單字, Token filter 做單字處理,大小寫統一、同義字轉換。

So.... what is invert index?!
記得上方投影片這個例子(slides p.34):
Elasticsearch 用invert index建立index提供full text search。
以投影片中的兩個document為例:
The quick brown fox jumped over the lazy dog
Quick brown foxes leap over lazy dogs in summer

分析下來如下
建⽴立出來的 inverted index 看起來⼤大概像是左邊的表。
Term Doc_1 Doc_2
-------------------------
Quick    |      | X
The       | X  |
brown   | X  | X
dog       | X  |
dogs     |      | X
fox       | X   |
foxes    |      | X
in          |      | X
jumped | X  |
lazy      | X  | X
leap      |      | X
over      | X | X
quick    | X |
summer |     |
X the     | X |
------------------------
搜尋 ”quick brown” 的結果 如下表。
Term Doc_1 Doc_2
-------------------------
brown  | X   | X
quick   | X   |
------------------------
Total    | 2   | 1

所謂正向,是用id為where條件去取得整個row的content。
反向索引 invert index就是用row裡面的content 做為條件,去收尋到整個document的內容,方便做全文搜索。

ELASTICSEARCH 最基本的INDEX STRUCTURE - INVERTED INDEX (反向索引).在LUCENE 已經把FULLTEXT SEARCH效能調的不錯.

正向索引就如同RDB的TABLE,假設ID 是INDEX. SELECT FROM WHERE 條件會以ID 去撈該ROW的資料。

反向索引就是對內容做索引,去找到該DOCUMENT. 假設資料內容是"WINTER IS COMING.",你找關鍵字"IS” 就會回應找到這筆DOCUMENT.



Tuning for indexing speed

Elasticsearch performance tuning
舉例幾個比較直覺的
1. Use bulk requests- 一次請求中調用多個index的操縱,可以先把批量請求大小調到最佳(不調整硬體規格的狀況下吃進的指令數)
2. Use multiple workers/thread to send  data - 不只同上可用批量,還能再用多執行緒去送
3. Unset or increase the refresh interval- ES 預設是1秒,官方建議提高成60秒,坊間建議30秒。而AWS ES預設是關閉的
4. Disable replicas for initial loads-建議在initial 時「暫時」關閉replica來增加index效能。Tuning for search speed 


AWS Elasticsearch Performance Tuning

AWS ES performance tuning
可以增加translog flush threshold size
預設是512mb

Translog的功用在於操作的日誌寫入,並作近期操作調查。因為建立index本身很昂貴,所以會交由flush這個動作執行提交並開始新log的動作。

Others

2021/1/15 Elasticsearch 的License已經從Apache 2.0 改成SSPL 跟自己的Elastic License
We are moving our Apache 2.0-licensed source code in Elasticsearch and Kibana to be dual licensed under Server Side Public License (SSPL) and the Elastic License
直覺上是因為像是AWS Elasticsearch這樣的雲端服務廠商向客戶收費卻沒有回饋給community,但AWS也有提到符合原本開源的規範,收費是因為instance 機器的錢。




Appendix

Apache Lucene 是什麼樣的架構概念呢?
Lucene是個Java open source full text search 引擎開發包,方便全文檢索。每小時能夠index 150GB+ data, only need 1MB memory。

留言

這個網誌中的熱門文章

[專案] 銀行端末系統

如何在MacOS 中自由切換不同Python版本 - pyenv + virtualenv

用 C# 控制 Win7 輸入法