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