Noob's Space

Elasticsearch:一套資料搜尋分析系統

最近接觸了 Elasticsearch 這套系統,它能夠以 JSON 的形式儲存資料,並且去做即時的分析和搜尋。那它和 MySQL 資料庫有什麼不一樣呢?

MySQL 屬於 RDBMS 的資料庫,但 Elasticsearch 比較算是搜尋引擎,而且 Elasticsearch 的安裝簡單,可以透過 HTTP 並使用 JSON 來處理資料。

Elasticsearch

概念釐清

由於 Elasticsearch 和一般 RDBMS 架構不同,所以在名詞上也不太一樣。和 MySQL 比照的話大概是這樣:

MySQL:Server→Databases→Tables→Rows→Columns

Elasticsearch:Node→Indices→Types→Documents→Fields

註:indices 是 index 的複數。

另外,Elasticsearch 是使用 JSON 的巢狀結構,不是二維表格。

安裝 Elasticsearch

這裡以 Linux 環境為例。不過 Windows、Mac 都有相對應版本。

Elasticsearch 是用 Java 寫的,所以執行環境需要有 jre。

# apt-get install openjdk-7-jre

接著到 Elastichsearch 的下載頁面取得最新版本的連結(一般來說選 tar.gz 版本),之後用 wget 下載下來,例如:

$ wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.1.1/elasticsearch-2.1.1.tar.gz

接著解壓縮(記得把2.1.1替換成你下載的版本)。

$ tar zxf elasticsearch-2.1.1.tar.gz

切換到 elasticsearch 目錄後,可以直接執行 Elasticsearch。

$ ./bin/elasticsearch

也可以加上 -f 選項讓 Elasticsearch 在後台運作。

Elasticsearch

操作 Elasticsearch

看到 Started 字樣後,就代表 Elacsticsearch 已經啟動完成。由於 Elasticsearch 是用 Java 寫的,當然有提供它的 Java API,不過在這邊我還是選擇用比較簡單的 RESTful API 來操作。

操作 Elasticsearch 的格式基本上是這樣:

curl -X<method> ‘http://<server>:<port>/<index>/<type>/[<id>]

不一定要輸入 id,只是不指定 id 的話使用的 HTTP Method 不一樣。

接著來試著新增一些資料到 Elasticsearch 上吧!例如我們建立一個 twitter 的 user (Elasticsearch 會自動幫我們建立索引):

$ curl -XPUT 'http://192.168.16.9:9200/twitter/user/Noob?pretty' -d '{"name": "Noob"}'

?pretty 是什麼?你可以不要加試試看,加了只是會讓它回應的排版變比較美而已 XD

可以用 GET 方法來取得資料,例如:

$ curl -XGET 'http://192.168.16.9:9200/twitter/user/Noob?pretty'

既然叫做 Elasticsearch,最重要的應該還是搜尋吧?一樣是用 GET 方法,如果你有多筆資料,你可以這樣搜尋:

$ curl -XGET 'http://192.168.16.9:9200/twitter/tweet/_search?pretty'

1

這些回傳的資料都是巢狀的 JSON 格式,會很好處理。當然還有其他搜尋的方式,可以參考官方文件看看。

最後,如果對 Elasticsearch 有興趣,可以看看 GitHub 上的文件:elastic/elasticsearch

你可能會有興趣......?

廣告