# elasticsearch(搜索引擎)介紹
ElasticSearch是一個基于Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java開發的,并作為Apache許可條款下的開放源碼發布,是最流行的企業搜索引擎。設計用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
我們建立一個網站或應用程序,并要添加搜索功能,令我們受打擊的是:搜索工作是很難的。我們希望我們的搜索解決方案要快,我們希望有一個零配置和一個完全免費的搜索模式,我們希望能夠簡單地使用JSON通過HTTP的索引數據,我們希望我們的搜索服務器始終可用,我們希望能夠一臺開始并擴展到數百,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個云的解決方案。Elasticsearch旨在解決所有這些問題和更多的問題。

Elasticsearch 不僅僅只是一個全文搜索引擎。 它可以被下面這樣準確的形容:
一個分布式的實時文檔存儲,每個字段可以被索引與搜索——作數據庫用
一個分布式實時分析搜索引擎
能勝任上百個服務節點的擴展,并支持 PB 級別的結構化或者非結構化數據
**ES的誕生
**

**ES的發展歷程**
Elasticsearch 后來作為一家公司(Elastic公司)進行運作,定位為數據搜索和分析平臺。在2014年6月獲得7000萬美元融資,累積融資過億美元。
ES現在可以與Java、Ruby、Python、PHP、Perl、.NET等多種客戶端集成。也可與Hadoop、Spark等大數據分析平臺進行集成,功能十分強大。
基于Elasticsearch衍生出了一系列開源軟件,統稱為 Elatic Stack

說明:
因為logstash比較耗內存,所以用Beats來替代
為避免版本混亂,從5.0開始,Elastic公司將各組件的版本號統一。使用時,各組件版本號應一致(版本號形式:x.y.z,z可以不同)
**ES的應用場景**

**ES的架構**

說明:
Gateway是ES用來存儲索引的文件系統,支持多種類型。
Gateway的上層是一個分布式的lucene框架。
Lucene之上是ES的模塊,包括:索引模塊、搜索模塊、映射解析模塊等
ES模塊之上是 Discovery、Scripting和第三方插件。Discovery是ES的節點發現模塊,不同機器上的ES節點要組成集群需要進行消息通信,集群內部需要選舉master節點,這些工作都是由Discovery模塊完成。支持多種發現機制,如 Zen 、EC2、gce、Azure。Scripting用來支持在查詢語句中插入javascript、python等腳本語言,scripting模塊負責解析這些腳本,使用腳本語句性能稍低。ES也支持多種第三方插件。
**
ES的核心概念**
Near Realtime(NRT) 近實時。數據提交索引后,立馬就可以搜索到。
Cluster 集群,一個集群由一個唯一的名字標識,默認為“elasticsearch”。集群名稱非常重要,具有相同集群名的節點才會組成一個集群。集群名稱可以在配置文件中指定。
Node 節點:存儲集群的數據,參與集群的索引和搜索功能。像集群有名字,節點也有自己的名稱,默認在啟動時會以一個隨機的UUID的前七個字符作為節點的名字,你可以為其指定任意的名字。通過集群名在網絡中發現同伴組成集群。一個節點也可是集群。
Index 索引: 一個索引是一個文檔的集合(等同于solr中的集合)。每個索引有唯一的名字,通過這個名字來操作它。一個集群中可以有任意多個索引。
Type 類型:指在一個索引中,可以索引不同類型的文檔,如用戶數據、博客數據。從6.0.0 版本起已廢棄,一個索引中只存放一類數據。
Document 文檔:被索引的一條數據,索引的基本信息單元,以JSON格式來表示。
Shard 分片:在創建一個索引時可以指定分成多少個分片來存儲。每個分片本身也是一個功能完善且獨立的“索引”,可以被放置在集群的任意節點上。分片的好處:
允許我們水平切分/擴展容量
可在多個分片上進行分布式的、并行的操作,提高系統的性能和吞吐量。
注意:分片數創建索引時指定,創建后不可改了。備份數可以隨時改。
Replication 備份: 一個分片可以有多個備份(副本)。備份的好處:
高可用。一個主分片掛了,副本分片就頂上去
擴展搜索的并發能力、吞吐量。搜索可以在所有的副本上并行運行。-高并發下副本也可搜索
再上層是ES的傳輸模塊和JMX.傳輸模塊支持多種傳輸協議,如 Thrift、memecached、http,默認使用http。JMX是java的管理框架,用來管理ES應用。
最上層是ES提供給用戶的接口,可以通過RESTful接口和ES集群進行交互。
## 全文搜索引擎種類
1、elasticsearch
2、solr
3、sphinx
## 關系數據搜索缺點,也就是直接通過數據庫搜索

elasticsearch(搜索引擎)都能彌補以上缺點
# elasticsearch安裝
1、elasticsearch是由Java開發的,所以首先要安裝Java環境
注意:elasticsearch所需要的Java環境必須大于或者等于1.8版本
下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

我們下載Windows x64版本.exe文件,直接安裝
安裝好后,我們cmd命令輸入:java -version 查看java版本
2、elasticsearch安裝
運行系統可用內存>2G

雙擊進入bin文件夾里, elasticsearch.bat 回車運行
然后在瀏覽器輸入http://127.0.0.1:9200/ 返回數據說明成功

3、安裝elasticsearch(搜索引擎)的可視化管理工具elasticsearch-head
注意:(搜索引擎)的可視化管理工具elasticsearch-head,的安裝要用到node.js的npm 插件管理器
所以要先安裝node.js的npm 插件管理器
下載地址:https://nodejs.org/en/download/
我們下載windows版本即可,下載后安裝即可
安裝后cmd命令:npm 如下顯示表示安裝成功

(搜索引擎)的可視化管理工具elasticsearch-head的安裝
下載地址:https://github.com/mobz/elasticsearch-head
下載后解壓到指定目錄,會得到以下文件

cd進入到解壓的elasticsearch-head目錄
執行命令:cnpm install 安裝elasticsearch-head的依賴包
在執行命令:cnpm run start 啟動elasticsearch-head(搜索引擎)的可視化管理工具
訪問:http://localhost:9100/
訪問后可以看到(搜索引擎)的可視化管理工具

我們看到顯示未連接,我們需要配置elasticsearch-rtf(搜索引擎)連接,在elasticsearch/config/elasticsearch.yml 這個文件里配置
在文件的最后面寫入
```
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE
```
重啟elasticsearch(搜索引擎)后就可以連接了