Elasticsearch是一個基於Lucene的搜尋伺服器。它提供了一個分布式多使用者能力的全文檢索搜尋引擎,基於RESTful web介面。Elasticsearch是用Java開發的,並作為Apache授權條款下的開放源碼發布,是第二流行的企業搜尋引擎。設計用於雲端運算中,能夠達到即時搜尋,穩定,可靠,快速,安裝使用方便。
我們建立一個網站或應用程式,並要添加搜尋功能,令我們受打擊的是:搜尋工作是很難的。我們希望我們的搜尋解決方案要快,我們希望有一個零配置和一個完全免費的搜尋模式,我們希望能夠簡單地使用JSON通過HTTP的索引資料,我們希望我們的搜尋伺服器始終可用,我們希望能夠一台開始並擴充到數百,我們要即時搜尋,我們要簡單的多租戶,我們希望建立一個雲的解決方案。Elasticsearch旨在解決所有這些問題和更多的問題。
Elasticsearch 是開源搜尋平台的新成員,即時資料分析的神器,發展迅猛,基於 Lucene、RESTful、分布式、面向雲端運算設計、即時搜尋、全文檢索搜尋、穩定、高可靠、可擴充、安裝+使用方便,介紹都說的很好聽,好不好用拿出來遛一遛。
做了個簡單測試,在兩台完全一樣的虛擬機器上,2000萬條左右資料,Elasticsearch 插入資料速度比 MongoDB 慢很多(可以忍受),但是搜尋/查詢速度快10倍以上,這隻是單機情況,多機叢集情況下 Elasticsearch 表現更好一些。以下安裝步驟在 Ubuntu Server 14.04 LTS 上完成。
安裝 Elasticsearch
升級系統後安裝 Oracle Java 7,既然 Elasticsearch 官方推薦使用 Oracle JDK 7 就不要嘗試 JDK 8 和 OpenJDK 了:
$ sudo apt-get update$ sudo apt-get upgrade $ sudo apt-get install software-properties-common$ sudo add-apt-repository ppa:webupd8team/java$ sudo apt-get update $ sudo apt-get install oracle-java7-installer
加入 Elasticsearch 官方源後安裝 elasticsearch:
$ wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | apt-key add -$ sudo echo "deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main" >> /etc/apt/sources.list $ sudo apt-get update$ sudo apt-get install elasticsearch
加入到系統開機檔案並啟動 elasticsearch 服務,用 curl 測試一下安裝是否成功:
$ sudo update-rc.d elasticsearch defaults 95 1 $ sudo /etc/init.d/elasticsearch start $ curl -X GET 'http://localhost:9200'{ "status" : 200, "name" : "Fer-de-Lance", "version" : { "number" : "1.1.1", "build_hash" : "f1585f096d3f3985e73456debdc1a0745f512bbc", "build_timestamp" : "2014-04-16T14:27:12Z", "build_snapshot" : false, "lucene_version" : "4.7" }, "tagline" : "You Know, for Search"}
Elasticsearch 的叢集和資料管理介面 Marvel 非常贊,可惜只對開發環境免費,如果這個工具也免費就無敵了,安裝很簡單,完成後重啟服務訪問 http://192.168.2.172:9200/_plugin/marvel/ 就可以看到介面:
$ sudo /usr/share/elasticsearch/bin/plugin -i elasticsearch/marvel/latest $ sudo /etc/init.d/elasticsearch restart * Stopping Elasticsearch Server [ OK ] * Starting Elasticsearch Server [ OK ]
安裝 Python 用戶端驅動
和 MongoDB 一樣,我們一般用程式和 Elasticsearch 互動,Elasticsearch 也支援多種語言的用戶端驅動,這裡僅安裝 Python 驅動,其他語言可以參考官方文檔。
$ sudo apt-get install python-pip$ sudo pip install elasticsearch
寫個簡單程式把 gene_info.txt 的資料匯入到 Elasticsearch:
#!/usr/bin/python# -*- coding: UTF-8 -*- import os, os.path, sys, reimport csv, time, stringfrom datetime import datetimefrom elasticsearch import Elasticsearch def import_to_db(): data = csv.reader(open('gene_info.txt', 'rb'), delimiter='\t') data.next() es = Elasticsearch() for row in data: doc = { 'tax_id': row[0], 'GeneID': row[1], 'Symbol': row[2], 'LocusTag': row[3], 'Synonyms': row[4], 'dbXrefs': row[5], 'chromosome': row[6], 'map_location': row[7], 'description': row[8], 'type_of_gene': row[9], 'Symbol_from_nomenclature_authority': row[10], 'Full_name_from_nomenclature_authority': row[11], 'Nomenclature_status': row[12], 'Other_designations': row[13], 'Modification_date': row[14] } res = es.index(index="gene", doc_type='gene_info', body=doc) def main(): import_to_db() if __name__ == "__main__": main()
Kibana 是一個功能強大的資料顯示用戶端,通過外掛程式方式和 Elasticsearch 整合在一起,安裝很容易,下載解壓就可以了,然後重啟 Elasticsearch 服務訪問 http://192.168.2.172:9200/_plugin/kibana/ 就能看到介面:
$ wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz$ tar zxvf kibana-3.0.1.tar.gz$ sudo mv kibana-3.0.1 /usr/share/elasticsearch/plugins/_site$ sudo /etc/init.d/elasticsearch restart