全文檢索引擎(六)---elasticsearch初體驗

本篇主要介紹對es的初次體檢,以及安裝和初步使用。html

一.es簡介

Elasticsearch 是一個分佈式的 RESTful 風格的搜索和數據分析引擎,可以解決不斷涌現出的各類用例。做爲 Elastic Stack 的核心,它集中存儲您的數據,幫助您發現意料之中以及意料以外的狀況。java

特色node

1.Elasticsearch容許您以任何方式執行和組合多種類型的搜索 - 結構化,非結構化,地理位置,度量標準。數據庫

2.Elasticsearch聚合,您能夠縮小以探索數據中的趨勢和模式。express

3.您能夠以極其驚人的速度利用和訪問全部數據。json

4.Elasticsearch在分佈式環境中運行,從頭開始設計,以實現永久的安心。vim

5.數字,文本,地理位置,結構化,非結構化。 歡迎全部數據類型。windows

6.咱們使Elasticsearch易於在任何規模下運行,而不會影響功耗和性能。api

7.Elasticsearch使用標準的RESTful API和JSON。網絡

8.咱們還使用Java,Python,.NET,SQL和PHP等多種語言構建和維護客戶端。

9.Elasticsearch是一個近乎實時的搜索平臺。 這意味着從索引文檔到可搜索文檔的時間有一點延遲(一般是一秒)。

10.若是您的網絡上當前沒有其餘Elasticsearch節點正在運行,則默認狀況下,啓動單個節點將造成名爲elasticsearch的新單節點集羣。

2、es安裝(windows)(6.3.2)

elasticsearch至少須要Java 8,建議您使用Oracle JDK版本1.8.0_131。

默認狀況下,Elasticsearch使用端口9200來提供對其REST API的訪問。 若有必要,能夠配置此端口。

對於 Windows 用戶, 咱們建議使用MSI 安裝程序包。該包包含一個圖形用戶界面 (GUI), 用於指導您完成安裝過程。

首先, 從 artifacts.elastic.co/downloads/e… 下載 Elasticsearch 6.3.2 MSI。 而後雙擊下載的文件以啓動 GUI。在第一個屏幕中, 選擇部署目錄:

而後選擇是做爲服務安裝仍是根據須要手動啓動 Elasticsearch。要與 tar 示例對齊, 請選擇 "不安裝爲" 服務:

對於配置, 只需保留默認值:

再次, 要與 tar 示例對齊, 請取消選中全部插件以不安裝任何插件:

單擊 "安裝" 按鈕後, 將安裝 Elasticsearch:

默認狀況下, 將在中安裝 Elasticsearch。在此處導航並進入 bin 目錄, 以下所示:%PROGRAMFILES%\Elastic\Elasticsearch

使用命令提示符:

cd %PROGRAMFILES%\Elastic\Elasticsearch\bin
複製代碼

如今, 咱們已經準備好開始咱們的節點和單個羣集:

.\elasticsearch.exe
複製代碼

若是安裝過程當中的一切都很順利, 您應該會看到以下所示的一大堆消息:

[2016-09-16T14:17:51,251][INFO ][o.e.n.Node               ] [] initializing ...
[2016-09-16T14:17:51,329][INFO ][o.e.e.NodeEnvironment    ] [6-bjhwl] using [1] data paths, mounts [[/ (/dev/sda1)]], net usable_space [317.7gb], net total_space [453.6gb], spins? [no], types [ext4]
[2016-09-16T14:17:51,330][INFO ][o.e.e.NodeEnvironment    ] [6-bjhwl] heap size [1.9gb], compressed ordinary object pointers [true]
[2016-09-16T14:17:51,333][INFO ][o.e.n.Node               ] [6-bjhwl] node name [6-bjhwl] derived from node ID; set [node.name] to override
[2016-09-16T14:17:51,334][INFO ][o.e.n.Node               ] [6-bjhwl] version[6.3.2], pid[21261], build[f5daa16/2016-09-16T09:12:24.346Z], OS[Linux/4.4.0-36-generic/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_60/25.60-b23]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [aggs-matrix-stats]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [ingest-common]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [lang-expression]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [lang-mustache]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [lang-painless]
[2016-09-16T14:17:51,967][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [percolator]
[2016-09-16T14:17:51,968][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [reindex]
[2016-09-16T14:17:51,968][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [transport-netty3]
[2016-09-16T14:17:51,968][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded module [transport-netty4]
[2016-09-16T14:17:51,968][INFO ][o.e.p.PluginsService     ] [6-bjhwl] loaded plugin [mapper-murmur3]
[2016-09-16T14:17:53,521][INFO ][o.e.n.Node               ] [6-bjhwl] initialized
[2016-09-16T14:17:53,521][INFO ][o.e.n.Node               ] [6-bjhwl] starting ...
[2016-09-16T14:17:53,671][INFO ][o.e.t.TransportService   ] [6-bjhwl] publish_address {192.168.8.112:9300}, bound_addresses {{192.168.8.112:9300}
[2016-09-16T14:17:53,676][WARN ][o.e.b.BootstrapCheck     ] [6-bjhwl] max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
[2016-09-16T14:17:56,731][INFO ][o.e.h.HttpServer         ] [6-bjhwl] publish_address {192.168.8.112:9200}, bound_addresses {[::1]:9200}, {192.168.8.112:9200}
[2016-09-16T14:17:56,732][INFO ][o.e.g.GatewayService     ] [6-bjhwl] recovered [0] indices into cluster_state
[2016-09-16T14:17:56,748][INFO ][o.e.n.Node               ] [6-bjhwl] started
複製代碼

若是不深刻詳細說明, 咱們能夠看到, 咱們的節點名爲 "6 bjhwl" (在您的案例中將是不一樣的字符集) 已經開始, 咱們已經在一個集羣中啓動了一個節點。

此時,訪問localhost:9200看到有內容,即安裝成功。

3、安裝中文分詞器

smartcn中文分詞器下載地址: artifacts.elastic.co/downloads/e….

下載後解壓到es的plugins目錄下便可。

4、安裝kibana(es可視化工具)

1.下載kibana 6.3.2 :www.elastic.co/cn/download…

2.在編輯器中打開配置/kibana yml。 設置爲指向您的 Elasticsearch 實例elasticsearch.url

3.運行 (或在 Windows 上)bin/kibanabin\kibana.bat

4.訪問http://localhost:5601

5、新增數據

es支持http json形式直接操做數據,所以先使用下經過http請求進行新增數據。

例如:新建一個index名稱爲zhongwen,index 裏面包含一個名爲person的type,person中包含三個屬性,user,title,desc。

index能夠理解爲數據庫中的一個庫,type 能夠理解爲庫中的一個數據表,屬性對應數據庫中的字段。
複製代碼

建立index,並配置mapping文件。 mapping文件是對index中每一個字段的索引類型,解析類型,使用的分詞器等進行設置的一個配置文件,以後的文章將會詳細講述如何根據不一樣需求配置不一樣的mapping。

mapping文件es會自動生成,若是以爲想自定義的話,能夠本身建立。
複製代碼

使用httpclient進行建立index,並制定字段使用smartcn中文分詞器:

存入數據:

存入數據需指定要存入的index,type以及要存入的id爲多少。

至此,數據已經存入es中,若想查看數據,可使用http請求的方式,或者使用kibana直接查看。

若在kibana中查看,點擊kibana的左側菜單discover,輸入建立的type名稱,例如:person,選擇下一步,便可看到數據。

6、查詢數據

es提供多種查詢方式,根據不一樣的須要,咱們經過不一樣的查詢方式進行查詢。

在添加數據中,咱們添加了一條帶有中文的數據,咱們可否像在數據庫中like同樣進行模糊查詢呢?答案是確定的。

這次,咱們使用match匹配去命中剛纔的插入的數據,以下:

能夠看到,咱們的中文也能像在數據庫中進行模糊查詢同樣進行搜索。

固然,es的強大的搜索功能,包含多種搜索,在以後的文章中將會細細講述。

7、集羣搭建

咱們系統中的數據在單機es狀況下徹底適用,調查集羣搭建是爲了考慮es在橫向擴容上是否方便。答案是確定的,es是爲分佈式而生,所以在集羣搭建方面很是便利。

1.在每臺機器上安裝es

2.集羣配置

集羣配置中最重要的兩項是node.namenetwork.host,每一個節點都必須不一樣。其中node.name是節點名稱,主要是在Elasticsearch本身的日誌加以區分每個節點信息。 discovery.zen.ping.unicast.hosts是集羣中的節點信息,可使用IP地址、可使用主機名(必須能夠解析)。

vim /etc/elasticsearch
cluster.name: aubin-cluster                                 # 集羣名稱
node.name: els1                                             # 節點名稱,僅僅是描述名稱,用於在日誌中區分

path.data: /var/lib/elasticsearch                           # 數據的默認存放路徑
path.logs: /var/log/elasticsearch                           # 日誌的默認存放路徑

network.host: 192.168.0.1                                   # 當前節點的IP地址
http.port: 9200                                             # 對外提供服務的端口,9300爲集羣服務的端口

discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"]       
# 集羣個節點IP地址,也可使用els、els.shuaiguoxia.com等名稱,須要各節點可以解析

discovery.zen.minimum_master_nodes: 2                       # 爲了不腦裂,集羣節點數最少爲 半數+1
複製代碼

3.啓動

4.查看集羣狀態

GET /_cat/health?v
複製代碼

至此,集羣搭建完畢,因爲es天生爲分佈式的,所以搭建起來很是方便。

8、java調用es

es一樣提供了多種語言的客戶端,操做java咱們使用目前最新的java high level rest client

java 高級 rest 客戶端在 java 低級別 rest 客戶端上工做。其主要目標是公開 API 特定的方法, 即接受請求對象做爲參數並返回響應對象, 以便請求編組和響應不編組由客戶端自己處理。 能夠同步或異步調用每一個 API。同步方法返回響應對象, 而異步方法 (其名稱之後綴結尾) 要求在接收到響應或錯誤後 (在低級客戶端管理的線程池上) 通知偵聽器參數。 Java 高級別 REST 客戶端依賴於 Elasticsearch 核心項目。它接受與之相同的請求參數, 並返回相同的響應對象。

java 高級別 REST 客戶端須要 java 1.8, 並依賴於 Elasticsearch 核心項目。客戶端版本與爲客戶端開發的 Elasticsearch 版本相同。

maven依賴:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.3.2</version>
</dependency>
複製代碼

建立客戶端:

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));
複製代碼

關閉客戶端:

client.close();
複製代碼

其餘具體的各項api在以後的文章中將會詳細講述。本文將不過多闡述。

api可參考:java-high-level-rest-client官方文檔

總結

es安裝簡單,集羣搭建方便。在插入數據時可不配置mapping文件,使用es自動配置,初次使用更加方便。但不包含可視化頁面,需另外安裝kibana或者head(集羣節點可視化工具)進行可視化。提供多種查詢方式,文檔清晰。對多種語言進行支持,並提供客戶端api進行快速使用。

整體來講,es一樣值得推薦。

相關文章
相關標籤/搜索