elasticsearch安装和使用
一、全文檢索基礎
1. 什么是全文檢索
將?結構化數據中的?部分信息提取出來,重新組織,使其變得有?定結構,然后對此有?定結構的數
 據進?搜索,從?達到搜索相對較快的?的。這部分從?結構化數據中提取出的然后重新組織的信息,
 我們稱之索引。
例如:字典。字典的拼?表和部?檢字表就相當于字典的索引,對每?個字的解釋是?結構化的,如果
 字典沒有?節表和部?檢字表,在茫茫辭海中找?個字只能順序掃描。然?字的某些信息可以提取出來
 進?結構化處理,?如讀?,就?較結構化,分聲母和韻母,分別只有?種可以??列舉,于是將讀?
 拿出來按?定的順序排列,每?項讀?都指向此字的詳細解釋的頁數。我們搜索時按結構化的拼?搜到
 讀?,然后按其指向的頁數,便可找到我們的?結構化數據——也即對字的解釋。
這種先建?索引,再對索引進?搜索的過程就叫全?檢索(Full-text Search)。
雖然創建索引的過程也是?常耗時的,但是索引?旦創建就可以多次使?,全?檢索主要處理的是查
 詢,所以耗時間創建索引是值得的。
2.全文檢索流程
3.相關概念
1.索引庫
索引庫就是存儲索引的保存在磁盤上的?系列的?件。??存儲了建?好的索引信息以及?檔對象。
 
 一個索引庫相當于數據庫中的一張表
2.document對象
獲取原始內容的目的是為了索引,在索引前需要將原始內容創建成文檔(Document),?檔中包括?個?個的域(Field),域中存儲內容。每個?檔都有?個唯?的編號,就是?檔id。
document對象相當于表中的一條記錄
3.field對象
如果我們把document看做是數據庫中?條記錄的話,field相當于是記錄中的字段。field是索引庫中存儲數據的最?單位。field的數據類型?致可以分為數值類型和?本類型,?般需要查詢的字段都是?本類型的,field的還有如下屬性:
- 是否分詞:是否對域的內容進?分詞處理。前提是我們要對域的內容進?查詢。
 - 是否索引:將Field分析后的詞或整個Field值進?索引,只有索引?可搜索到。?如:商品名稱、商品簡介分析后進?索引,訂單號、?份證號不?分詞但也要索引,這些將來都要作為查詢條件。
 - 是否存儲:將Field值存儲在?檔中,存儲在?檔中的Field才可以從Document中獲取?如:商品名稱、訂單號,凡是將來要從Document中獲取的Field都要存儲。
 - term對象
從?檔對象中拆分出來的每個單詞叫做?個Term,不同的域中拆分出來的相同的單詞是不同的term。term中包含兩部分?部分是?檔的域名,另?部分是單詞的內容。term是創建索引的關鍵詞對象。 
二、Elasticsearch簡介
2.1什么是ElasticSearch
Elaticsearch,簡稱為es, es是?個開源的?擴展的分布式全?檢索引擎,它可以近乎實時的存儲、檢索數據;本?擴展性很好,可以擴展到上百臺服務器,處理PB級別的數據。es也使?Java開發并使?Lucene作為其核?來實現所有索引和搜索的功能,但是它的?的是通過簡單的RESTful API來隱藏Lucene的復雜性,從?讓全?搜索變得簡單。
2.2Elasticsearch的使用案例
- 2013年初,GitHub拋棄了Solr,采取ElasticSearch 來做PB級的搜索。 “GitHub使?ElasticSearch搜索20TB的數據,包括13億?件和1300億?代碼”
 - 維基百科:啟動以elasticsearch為基礎的核?搜索架構
 - SoundCloud:“SoundCloud使?ElasticSearch為1.8億?戶提供即時?精準的?樂搜索服務”
 - 百度:百度?前?泛使?ElasticSearch作為?本數據分析,采集百度所有服務器上的各類指標數據及?戶?定義數據,通過對各種數據進?多維分析展?,輔助定位分析實例異常或業務層?異常。?前覆蓋百度內部20多個業務線(包括casio、云分析、?盟、預測、?庫、直達號、錢包、風控等),單集群最?100臺機器,200個ES節點,每天導?30TB+數據
 - 新浪使?ES 分析處理32億條實時?志
 - 阿?使?ES 構建挖財??的?志采集和分析體系
 
2.3Elasticsearch對比Solr
- Solr 利? Zookeeper 進?分布式管理,? Elasticsearch ??帶有分布式協調管理功能;
 - Solr ?持更多格式的數據,? Elasticsearch 僅?持json?件格式;
 - Solr 官?提供的功能更多,? Elasticsearch 本?更注重于核?功能,?級功能多有第三?插件提供;
 - Solr 在傳統的搜索應?中表現好于 Elasticsearch,但在處理實時搜索應?時效率明顯低于Elasticsearch
 
三、Elasticsearch相關術語
3.1概述
Elasticsearch是面向文檔(document oriented)的,這意味著它可以存儲整個對象或文檔(document)。然而它不僅僅是存儲,還會索引(index)每個文檔內容使之可以被搜索。在Elasticsearch中,你可以對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。Elasticsearch對比統關系型數據庫如下:
 
3.2Elsticsearch核心概念
3.2.1 索引 index
一個索引就是一個擁有積分相似特征的文檔集合。比如說,你可以有一個用戶數據的索引,另一個產品目錄的索引,還有一個訂單數據的索引,還有一個訂單數據的索引。一個索引由一個名字來標識(必須全部是小寫字母),并且當我們對對應于這個索引中的文檔進行索引、搜索、更新和刪除的時候,都要使用到這個名字。在一個集群中,可以定義任意多的索引。
3.2.2 類型 type
在一個索引中,你可以定義一種或多種類型。一個類型是你的索引的一個邏輯上的分類/分區,其語義完全由你來定。通常,會為具有一組共同字段的文檔定義一個類型。比如說,我們假設你運營一個博客平臺并且將你所有的數據存儲到一個索引中。在這個索引中,你可以為用戶數據定義一個類型,為博客數據定義一個類型,當然,也可以為評論數據定義另一個類型。
3.2.3 字段 field
相當于是數據表的字段,對文檔數據根據不同數據進行的分類標識。
3.2.4 映射 mapping
mapping 是處理數據的方式和規則方面做一些限制,比如某個字段的數據類型、默認值、分析器、是否被索引等等,這些都是映射里面可以設置的,其他就是處理es里面數據的一些使用規則設置也叫做映射,按著最優規則處理數據對性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能對性能更好。
3.2.5 文檔 document
一個文檔是一個可被索引的基礎信息單元。比如,你可以擁有某一個客戶文案,某一個產品的一個文檔,當然,也可以擁有某個訂單的一個文檔。文檔以JSON(JavaScript Object Notation)格式來表示,而JSON是一個到處存在的互聯網數據交互格式。
在一個index/type里面,你可以存儲任意多的文檔。注意,盡管一個文檔,物理上存在于一個索引之中,文檔必須被索引/賦予一個索引的type。
3.2.6 接近實施 NRT
Elasticsearch是一個接近實時的搜索平臺。這意味著,從索引一個文檔直到這個文檔能夠被搜索到有一個輕微的延遲(通常是1秒以內)
3.2.7 集群 cluster
一個集群就是一個或多個節點組織在一起,他們共同持有整個數據,并一起提供索引和搜索功能。一個集群由一個唯一的名字標識,這個名字默認就是"elasticsearch"。這個名字很重要,因為一個節點智能通過指定某個集群的名字,來加入這個集群。
3.2.8 節點 node
一個節點是集群中的一個服務器,作為集群的一部分,它存儲數據,參與集群的索引和搜索功能。和集群類似,一個節點也是由一個名字標識的,默認情況下,這個名字是一個隨機的漫威漫畫角色名字,這個名字會在啟動的時候賦予節點。這個名字對于管理工作來說挺重要的,因為在這個管理過程中,你會去確定網絡中的哪些服務器對應于Elasticsearch集群中的哪些節點。
一個節點可以通過配置集群名稱的方式來加入一個指定的集群。默認情況下,每個節點都會被安排加入到一個叫做"elasticseach"的集群中,這意味著,如果在你的網絡中啟動了若干個節點,并假定它們能夠相互發現彼此,它們將會自動地形成并加入到一個叫做“elasticsearch”的集群中。
在一個集群里,只要你想,可以擁有任意多個節點。并且,如果當你的網絡中沒有任何Elasticsearch節點,這是啟動一個節點,會默認創建并加入一個叫做"elasticsearch"的集群。
3.2.9 分片和復制shards&replicas
?個索引可以存儲超出單個結點硬件限制的?量數據。?如,?個具有10億?檔的索引占據1TB的磁盤空間,?任?節點都沒有這樣?的磁盤空間;或者單個節點處理搜索請求,響應太慢。為了解決這個問題,Elasticsearch提供了將索引劃分成多份的能?,這些份就叫做分?。當你創建?個索引的時候,你可以指定你想要的分?的數量。每個分?本?也是?個功能完善并且獨?的“索引”,這個“索引”可以被放置到集群中的任何節點上。分?很重要,主要有兩??的原因:
 1)允許你?平分割/擴展你的內容容量。
 2)允許你在分?(潛在地,位于多個節點上)之上進?分布式的、并?的操作,進?提?性能/吞吐量。?于?個分?怎樣分布,它的?檔怎樣聚合回搜索請求,是完全由Elasticsearch管理的,對于作為?戶的你來說,這些都是透明的。在?個?絡/云的環境?,失敗隨時都可能發?,在某個分?/節點不知怎么的就處于離線狀態,或者由于任何原因消失了,這種情況下,有?個故障轉移機制是?常有?并且是強烈推薦的。為此?的,Elasticsearch允許你創建分?的?份或多份拷貝,這些拷貝叫做復制分?,或者直接叫復制。復制之所以重要,有兩個主要原因: 在分?/節點失敗的情況下,提供了?可?性。因為這個原因,注\意到復制分?從不與原/主要(original/primary)分?置于同?節點上是?常重要的。擴展你的搜索量/吞吐量,因為搜索可以在所有的復制上并?運?。總之,每個索引可以被分成多個分?。?個索引也可以被復制0次(意思是沒有復制)或多次。?旦復制了,每個索引就有了主分?(作為復制源的原來的分?)和復制分?(主分?的拷貝)之別。分?和復制的數量可以在索引創建的時候指定。在索引創建之后,你可以在任何時候動態地改變復制的數量,但是你事后不能改變分?的數量。默認情況下,Elasticsearch中的每個索引被分?5個主分?和1個復制,這意味著,如果你的集群中?少有兩個節點,你的索引將會有5個主分?和另外5個復制分?(1個完全拷貝),這樣的話每個索引總共就有10個分?。
四、Elasticsearch安裝
使用docker 安裝 elasticsearch
安裝成功如圖:
 
 3. 運行容器
9200端?(Web管理平臺端?) 9300(服務默認端?)
瀏覽器輸?地址訪問:http://自己的ip:9200/
 
 4. 開啟遠程連接
 上?完成安裝后,es并不能正常使?,elasticsearch從5版本以后默認不開啟遠程連接,程序直接連接會報如下錯誤:
 
 我們需要修改es配置開啟遠程連接,代碼如下:
登錄容器
docker exec -it kkb_es /bin/bash
 同時添加代碼
重啟后發現重啟啟動失敗了,這時什么原因呢?這與我們剛才修改的配置有關,因為elasticsearch在啟動的時候會進??些檢查,?如最多打開的?件的個數以及虛擬內存區域數量等等,如果你放開了此配置,意味著需要打開更多的?件以及虛擬內存,所以我們還需要系統調優修改vi /etc/security/limits.conf ,追加內容 (nofile是單個進程允許打開的最??件個數 soft nofile 是軟限制 hard nofile是硬限制 ),(追加到文檔末尾即可)
修改vi /etc/sysctl.conf,追加內容 (限制?個進程可以擁有的VMA(虛擬內存區域)的數量 )
vm.max_map_count=655360執?下?命令 修改內核參數馬上?效
sysctl -p重啟虛擬機、再次啟動容器,發下已經可以啟動并遠程訪問
reboot?提?:如果想讓容器開機重啟,可以執?下?命令
docker update --restart=always + 容器名稱或者id五、ElasticSearch的客戶端(Kibana)
使用docker 安裝Kibana
為了節省時間,虛擬機中已經存在該版本鏡像了。
執行如下命令,開始安裝kibana容器
ELASTICSEARCH_URL=http://192.168.220.100:9200:是指鏈接的ES地址
 restart=always:每次服務都會重啟,也就是開啟啟動
 5601:5601:端?號
訪問http://192.168.220.100:5601如下:
Kibana使用
要使?Kibana,您必須?少配置?個索引。索引?于標識Elasticsearch索引以運?搜索和分析。它們還?于配置字段。
我們修改索引名稱的匹配?式即可,下?2個選項不?勾選。點擊create,會展?出當前配置的索引的域信息,如下圖:
 
 域的每個標題選項分別代表如下意思:
 
數據搜索
Discover為數據搜索部分,可以對?志信息進?搜索操作。
 
 可以使?Discover實現數據搜索過濾和搜索條件顯?以及關鍵詞搜索,如下圖:
 
DSL語句使用
DSL介紹
Query DSL是?個Java開源框架?于構建類型安全的SQL查詢語句。采?API代替傳統的拼接字符串來構造查詢語句。?前Querydsl?持的平臺包括JPA,JDO,SQL,Java Collections,RDF,Lucene,Hibernate Search。elasticsearch提供了?整套基于JSON的DSL語?來定義查詢。
索引操作
結果如下:
 
 2. 刪除某個索引
效果如下:
 
 3. 新增索引
效果如下:
 
 4. 創建映射
5.新增文檔數據
PUT /user/userinfo/1 {"name":"李四","age":22,"city":"深圳","description":"李四來?湖北武漢!" }Spring Data ElasticSearch
Spring Data ElasticSearch 基于 spring data API 簡化 elasticSearch操作,將原始操作elasticSearch的客戶端API 進?封裝 。Spring Data為Elasticsearch項?提供集成搜索引擎。Spring Data ElasticsearchPOJO的關鍵功能區域為中?的模型與Elastichsearch交互?檔和輕松地編寫?個存儲庫數據訪問層。官??站:http://projects.spring.io/spring-data-elasticsearch/
?法命名規則查詢的基本語法findBy + 屬性 + 關鍵詞 + 連接符
 
總結
以上是生活随笔為你收集整理的elasticsearch安装和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 《灵飞经》3·印神无双 第十三章 剑奕星
 - 下一篇: Word 2016 撰写论文(3): 文