全文搜尋引擎ElasticSearch
1. 介紹
ElasticSearch簡稱ES。
先來看它的用途:如果只是在多個機器同步,儲存和檢索大量資料,它與資料庫的差別在哪兒,為什麼非要使用ES呢?
ES是目前全文搜尋引擎的首選。全文檢索是指計算機索引程式通過掃描文章中的每一個詞,對每一個詞建立一個索引,指明該詞在文章中出現的次數和位置,當 使用者查詢時,檢索程式就根據事先建立的索引進行查詢,並將查詢的結果反饋給使用者的檢索方式。簡單地說它的優勢在於文字檢索。ES還可搭建成叢集,有良好的 擴充套件性。
如果把ES和資料庫相比,ES中包含多個索引index(相當於資料庫中的庫),索引又包括多個型別type(相當於資料庫中的表)。
Kibana是一個開源的分析與視覺化平臺,設計出來用於和Elasticsearch一起使用的。
2. ES環境搭建
(1) 安裝8以上的Java版本
$ cd /usr/lib/jvm/
$ tar xvzf jdk-8u181-linux-x64.tar.gz # 解包
$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_181/bin/java # 把新版java納入版本管理
$ sudo update-alternatives --config java # 選擇新版本為預設java版本
用以上方法設定可以省去手動設定JAVA_HOME等環境變數。
(2) 安裝ES和Kibana
安裝時,需要考慮ES和它的輔助軟體kibana的版本匹配,於是在網站
$ sudo dpkg -i elasticsearch-6.3.2.deb # ubuntu系統下安裝
$ sudo dpkg -i kibana-6.3.2-amd64.deb
(3) 配置ES
$ sudo vi /etc/elasticsearch/elasticsearch.yml # 編輯配置檔案,也可以通過該配置檔案,配置ES叢集(一個設成master node, 多個data node,使用同一叢集名) 此處介紹最簡單的配置,將host替換為你的地址 network.host: 127.0.0.1 # 我用的是本機地址
(4) 啟動ES
$ sudo service elasticsearch restart # 重啟ES
如果無法啟動,也可嘗試手動啟動服務,命令如下:
$ sudo /usr/share/elasticsearch/bin/elasticsearch -d
此時在瀏覽器中開啟:http://127.0.0.1:9200/,可看到埠已開啟。
(5) 配置Kibana
$ sudo vi /etc/kibana/kibana.yml # 修改配置檔案
此處介紹最簡單的配置,開啟對以下行的註釋:
server.port: 5601
server.host: "127.0.0.1"
server.name: "testme"
elasticsearch.url: "http://127.0.0.1:9200"
elasticsearch.preserveHost: true
kibana.index: ".kibana"
(6) 啟動Kibana
$ sudo service kibana restart
此時在瀏覽器中,開啟http://127.0.0.1:5601,即可看到kibana已啟動
3. 使用curl命令訪問ES
(1) 檢視服務狀態(也可以在瀏覽器中檢視)
$ curl 'localhost:9200/_cat/health?v'
(2) 檢視當前的Node節點
$ curl 'localhost:9200/_cat/nodes?v'
(3) 新建一個index(類似於資料庫操作中的建庫)
$ curl -XPUT 'localhost:9200/test_1'
(4) 檢視當前所有index
$ curl 'localhost:9200/_cat/indices?v'
(5) 向index中新增資料
$ curl -XPOST http://localhost:9200/test_1/product/ -d '{"author" : "Jack", , "age": 32}'
如果報錯406,請加入引數-H,如下:
$ curl -XPOST http://localhost:9200/test_1/product/ -H 'Content-Type: application/json' -d '{"author" : "Xie Yan"}'
插入的index是test_1,type是product,此處可以看到,輸入ES資料的格式是相當靈活的,它以key-value的方式存取,不像資料庫中固定的欄位。
(6) 查詢所有資料
$ curl -XPOST 'localhost:9200/test_1/_search' -d ' { "query": { "match_all": {} } }'
(7) 條件查詢
$ curl -XGET http://localhost:9200/test_1/_search?q=age:32
4. 使用Kibana檢視ES資料
瀏覽器訪問http://127.0.0.1:5601,在Management-> Elasticsearch中即可以檢視當前的index和type,及其它們的內容,以及進一步分析。
5. 用Python訪問ES資料
(1) 安裝python支援庫
$ sudo pip install elasticsearch
(2) 程式碼
from elasticsearch import Elasticsearch
es_host = '127.0.0.1'
es_index = 'test_1'
es = Elasticsearch(es_host)
result = es.search(index=es_index, body={}, size=10)
for item in result['hits']['hits']:
print(item)
(3) 說明
可以在body中加入一些用json串描述的查詢條件和需要的欄位,條件最多1024個,在size中可設定返回條目的多少,用此方法查詢最多能返回一萬條。
6. 參考
(1) ES與傳統資料庫的比較
(2) 搭建Elasticsearch 5.4分散式叢集