一、簡介
Elasticsearch是一個基於Apache Lucene(TM)的開源搜索引擎。無論在開源還是專有領域,Lucene可以被認爲是迄今爲止最先進、性能最好的、功能最全的搜索引擎庫。
但是,Lucene只是一個庫。想要使用它,你必須使用Java來作爲開發語言並將其直接集成到你的應用中,更糟糕的是,Lucene非常複雜,你需要深入瞭解檢索的相關知識來理解它是如何工作的。
Elasticsearch也使用Java開發並使用Lucene作爲其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。
不過,Elasticsearch不僅僅是Lucene和全文搜索,我們還能這樣去描述它:
- 分佈式的實時文件存儲,每個字段都被索引並可被搜索
- 分佈式的實時分析搜索引擎
- 可以擴展到上百臺服務器,處理PB級結構化或非結構化數據
而且,所有的這些功能被集成到一個服務裏面,你的應用可以通過簡單的RESTful API、各種語言的客戶端甚至命令行與之交互。
上手Elasticsearch非常容易。它提供了許多合理的缺省值,並對初學者隱藏了複雜的搜索引擎理論。它開箱即用(安裝即可使用),只需很少的學習既可在生產環境中使用。
ElasticSearch主要是放在服務器上使用的,在服務器上放一個搜索服務器之後,並可通過類似json的schema進行訪問了;
http://www.yiibai.com/elasticsearch/elasticsearch_index_apis.html
這個上面是關於這個語句的相關介紹,可以先去了解了解這個。感覺不看也是可以的,畢竟是類似json的,還是很容易看的懂得
二、chrome插件Sense
如果使用Chrome瀏覽器的,可以安裝一下sense這個插件,這個是爲了es特地開發的一個插件,還是很好用的。直接在谷歌網上應用店直接搜索安裝就好了。es還自己提供了一個head插件,也挺好用的,待會介紹。
三、安裝es5.5.0(目前最新)
elasticsearch主要還是基於linux命令的一個服務器,雖然在window下也可以本地用,但是會出現一下亂七八糟的問題。我是基於阿里雲CentOS 7.2 64位的,jdk1.8。話不多說,開始吧。
下載elasticsearch-5.5.0.zip
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.zip
解壓elasticsearch-5.5.0.zip(需要服務器上已經安裝了unzip)
unzip elasticsearch-5.5.0.zip
我比較喜歡吧東西放在一起,所以移動一下東西
mv elasticsearch-5.5.0 /data/home/es/lcoal
因爲elasticsearch這東西是開箱即用的,進入並目錄下
cd elasticsearch-5.5.0/bin
./elasticsearch
如果出現下面這個東西就成功啓動(我這裏配置了一些其他的東西,反正長得差不多就好了)
如果出現下面的錯誤,就說明你的服務器的內存不足(顯然不足的可能性是比較大的,因爲默認要求是2g的內存,作爲大學生租的內存只有一共2G)
進入config目錄下
cd elasticsearch-5.5.0/config
修改jvm.options文件
vi jvm.options
-Xms2g 變成這樣--------------> -Xms512m
-Xmx2g 變成這樣--------------> -Xms512m
這樣就可以把內存變成512M了,重新進去bin目錄下去啓動服務
如果成功了就啓動成功了,如果出現的是
意思是說不能在root用戶下啓動,這個時候就需要新建一個用戶,好像是elasticsearch爲了什麼安全什麼。
groupadd testes
useradd testes -g elasticsearch
chown -R testes:elasticsearch elasticsearch-5.5.0/
添加用戶的網上教程很多,這裏簡單解釋一下
創建用戶組elasticsearch
創建用戶testes屬於elasticsearch組
把elasticsearch-5.5.0/ 授權給用戶testes
然後切換到用戶testes下,進入bin目錄啓動服務,如果成功就成功,但是應該還是會報錯滴
su testes
cd elasticsearch-5.5.0/bin
./elasticsearch
你以爲會成功,嘿嘿嘿,想得美,反正我出現了下面這個:
這個是爲什麼呢,我也不知道,查了一下資料,這麼做是可以的。
切換到root用戶下
vi /etc/security/limits.conf
在最後添加下面內容,已經有了的話就覆蓋
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
然後
vi /etc/security/limits.d/90-nproc.conf
修改如下內容:
* soft nproc 1024
#修改爲
* soft nproc 2048
再
vi /etc/sysctl.conf
添加
vm.max_map_count=655360
最後
sysctl -p
把上面的流程走一遍,基本上就沒什麼問題了。
重新進入到並目錄下啓動下服務應該就可以了。記得切換到非root用戶下;
如果是在Centos6下啓動的服務,可能會出現這個錯誤:
ERROR: bootstrap checks failed
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
因爲Centos6不支持SecComp,而ES5.2.1默認bootstrap.system_call_filter爲true進行檢測,所以導致檢測失敗,失敗後直接導致ES不能啓動。
進入elasticsearch.yml目錄下,找到這個註釋,然後改成
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
然後應該就可以了。
順便說一下,-d表示在後臺啓動服務,要不然當前窗口關閉之後服務就停掉了
./elasticsearch -d
輸入下面命令行檢查是否真的成功啓動
curl localhost:9200
如果得到下面的東西,就說明服務啓動成功了
{
"name" : "D5XPIZy",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "ChxVh9fESbCcgJ03z3MDpQ",
"version" : {
"number" : "5.5.0",
"build_hash" : "260387d",
"build_date" : "2017-06-30T23:16:05.735Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
查看服務是否正常啓動
ps -ef | grep ela
這樣就是成功啓動服務的樣子,如果要結束,就把這個進程kill掉就好了。
這個時候可以用外網訪問以下9200端口,得到的東西和下面相同就成功了,但是應該還是不可以的,哈哈哈。驚不驚喜,意不意外。
進入config目錄,修改elasticsearch.yml
#network.host: 192.168.0.1
改成
network.host: 0.0.0.0
這個時候在sense輸入最上面輸入公網IP號和9200端口:
106.14.112.215:9200
這個時候應該就可以訪問了,如果還不行,拿去阿里雲配置一下安全組規則,把9200端口打開試一下,如果還不行,那就再去百度谷歌一下吧。
到這基本上elasticsearch就安裝好了。
添加一個索引信息,索引爲movies,類型爲movie,ID爲1
title,director,year,genres爲索引的內容
PUT /movies/movie/1
{
"title": "The Godfather",
"director": "Francis Ford Coppola",
"year": 1972,
"genres": ["Crime", "Drama"]
}
會在右邊看到這個東西說明索引創建成功,索引爲movies,類型爲movie,id爲1.版本號爲1,因爲是首次創建,所以result爲created
{
"_index": "movies",
"_type": "movie",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
查找索引信息
GET /_search #搜索全部
得到
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "movies",
"_type": "movie",
"_id": "1",
"_score": 1,
"_source": {
"title": "The Godfather",
"director": "Francis Ford Coppola",
"year": 1972,
"genres": [
"Crime",
"Drama"
]
}
}
]
}
}
剛剛添加的索引信息被搜索出來了。