Elasticsearch

一 .簡(jiǎn)介

(1) 一切設(shè)計(jì)都是為了提高搜索的性能

(2)?是一個(gè)基于Lucene構(gòu)建的開(kāi)源、分布式、RESTful的全文本搜索引擎

(3)?分布式實(shí)時(shí)文件存儲(chǔ),并將每一個(gè)字段都編入索引,使其可以被搜索

(4)?可以擴(kuò)展到上百臺(tái)服務(wù)器,達(dá)到擴(kuò)容效果,添加更多節(jié)點(diǎn);處理PB級(jí)別的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)

(5) 面向文檔型數(shù)據(jù)庫(kù),一條數(shù)據(jù)在這里就是一個(gè)文檔,用JSON作為文檔序列化的格式

類別數(shù)據(jù)庫(kù)

二 .概念

1.索引(index)

一個(gè)?索引?類似于傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)中的一個(gè)?數(shù)據(jù)庫(kù)?,是一個(gè)存儲(chǔ)關(guān)系型文檔的地方,并通過(guò)引用此名稱完成文檔的創(chuàng)建、搜索、更新及刪除操作

2.類型(type)

類型是索引內(nèi)部的邏輯分區(qū)(category/partition),然而其意義完全取決于用戶需求;一般來(lái)說(shuō),類型就是為那些擁有相同的域的文檔做的預(yù)定義

3.文檔(document)

文檔是Lucene索引和搜索的原子單位,它是包含了一個(gè)或多個(gè)域的容器,基于JSON格式進(jìn)行表示;文檔由一個(gè)或多個(gè)域組成,每個(gè)域擁有一個(gè)名字及一個(gè)或多個(gè)值,有多個(gè)值的域通常稱為“多值域”,文檔中,域的數(shù)據(jù)存儲(chǔ)時(shí)支持“string”、“numbers”、“Booleans”和“dates”幾種類型,不同類型的數(shù)據(jù)在索引時(shí)是略有區(qū)別的。在 Elasticsearch 中文檔是?不可改變?的,不能修改它們。

4.映射(mapping)

所有的文檔在存儲(chǔ)之前都要首先進(jìn)行分析。用戶可根據(jù)需要定義如何將文本分割成token、哪些token應(yīng)該被過(guò)濾掉,以及哪些文本需要進(jìn)行額外處理等等;ES還提供了額外功能,例如將域中的內(nèi)容按需排序

5.集群(cluster)

ES集群是一個(gè)或多個(gè)節(jié)點(diǎn)的集合,它們共同存儲(chǔ)了整個(gè)數(shù)據(jù)集,并提供了聯(lián)合索引以及可跨所有節(jié)點(diǎn)的搜索能力,多節(jié)點(diǎn)組成的集群擁有冗余能力,它可以在一個(gè)或幾個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí)保證服務(wù)的整體可用性集群靠其獨(dú)有的名稱進(jìn)行標(biāo)識(shí),默認(rèn)名稱為“elasticsearch”。節(jié)點(diǎn)靠其集群名稱來(lái)決定加入哪個(gè)ES集群,一個(gè)節(jié)點(diǎn)只能屬一個(gè)集群

6.節(jié)點(diǎn)(node)

運(yùn)行了單個(gè)實(shí)例的ES主機(jī)稱為節(jié)點(diǎn),它是集群的一個(gè)成員,可以存儲(chǔ)數(shù)據(jù)、參與集群索引及搜索,操作節(jié)點(diǎn)通過(guò)為其配置的ES集群名稱確定其所要加入的集群,用戶可以按需要自定義任何希望使用的名稱,但出于管理的目的,此名稱應(yīng)該盡可能有較好的識(shí)別性可以將請(qǐng)求發(fā)送到集群中的任何節(jié)點(diǎn),包括主節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)都知道任意文檔所處的位置,并且能夠?qū)⒄?qǐng)求直接轉(zhuǎn)發(fā)到存儲(chǔ)我們所需文檔的節(jié)點(diǎn)

7.分片(shared)和副本(replica)

ES的“分片(shard)”機(jī)制可將一個(gè)索引內(nèi)部的數(shù)據(jù)分布地存儲(chǔ)于多個(gè)節(jié)點(diǎn),它通過(guò)將一個(gè)索引切分為多個(gè)底層物理的Lucene索引完成索引數(shù)據(jù)的分割存儲(chǔ)功能,這每一個(gè)物理的Lucene索引稱為一個(gè)分片(shard)。每個(gè)分片其內(nèi)部都是一個(gè)全功能且獨(dú)立的索引,創(chuàng)建索引時(shí),用戶可指定其分片的數(shù)量,默認(rèn)數(shù)量為5個(gè)

Shard有兩種類型:primary和replica,即主shard及副本shard。

Primary shard用于文檔存儲(chǔ),每個(gè)新的索引會(huì)自動(dòng)創(chuàng)建5個(gè)Primary shard,當(dāng)然此數(shù)量可在索引創(chuàng)建之前通過(guò)配置自行定義,不過(guò),一旦創(chuàng)建完成,其Primary shard的數(shù)量將不可更改。

Replica shard是Primary Shard的副本,用于冗余數(shù)據(jù)及提高搜索性能。

每個(gè)Primary shard默認(rèn)配置了一個(gè)Replica shard,但也可以配置多個(gè),且其數(shù)量可動(dòng)態(tài)更改。ES會(huì)根據(jù)需要自動(dòng)增加或減少這些Replica shard的數(shù)量。ES集群可由多個(gè)節(jié)點(diǎn)組成,各Shard分布式地存儲(chǔ)于這些節(jié)點(diǎn)上。ES可自動(dòng)在節(jié)點(diǎn)間按需要移動(dòng)shard,例如增加節(jié)點(diǎn)或節(jié)點(diǎn)故障時(shí)。簡(jiǎn)而言之,分片實(shí)現(xiàn)了集群的分布式存儲(chǔ),而副本實(shí)現(xiàn)了其分布式處理及冗余功能

三 . 數(shù)據(jù)查詢

Query API是ElasticSearch的API中較大的一部分,基于Query DSL(JSON based language for building complex queries),可完成諸多類型查詢操作,

查詢執(zhí)行過(guò)程通常要分成兩個(gè)階段,分散階段及合并階段;分散階段是向所查詢的索引中的所有shard發(fā)起執(zhí)行查詢的過(guò)程,合并階段是將各shard返回的結(jié)果合并、排序并響應(yīng)給客戶端的過(guò)程

向ElasticSearch發(fā)起查詢操作有兩種方式:一是通過(guò)RESTful request API傳遞查詢參數(shù),也稱“query-string”;另一個(gè)是通過(guò)發(fā)送REST request body,也稱作JSON格式

向ElasticSearch發(fā)起查詢操作有兩種方式:一是通過(guò)RESTful request API傳遞查詢參數(shù),也稱“query-string”;另一個(gè)是通過(guò)發(fā)送REST request body,也稱作JSON格式。

search_api


request body

(1) 空搜索?GET /_search

hits:返回結(jié)果中最重要的部分,在?hits?數(shù)組中每個(gè)結(jié)果包含文檔的?_index?、?_type?、?_id?,加上?_source?字段

took:執(zhí)行整個(gè)搜索請(qǐng)求耗費(fèi)了多少毫秒

shards:?查詢中參與分片的總數(shù),已經(jīng)這些分片成功了多少失敗了多少

(2) 多索引,多類型

/_search? ? ? ? ? ? ?在所有的索引中搜索所有的類型

/gb/_search? ? ? ? 在?gb?索引中搜索所有的類型

/gb,us/_search? ?在?gb?和?us?索引中搜索所有的文檔

/g*,u*/_search? ? ? 在任何以?g?或者?u?開(kāi)頭的索引中搜索所有的類型

/gb/user/_search? ?在?gb?索引中搜索?user?類型

/gb,us/user,tweet/_search? ?在?gb?和?us?索引中搜索?user?和?tweet?類型

/_all/user,tweet/_search? 在所有的索引中搜索?user?和?tweet?類型

(3) .查詢表達(dá)式

結(jié)構(gòu)
一個(gè)完整的查詢請(qǐng)求

match_all:查詢簡(jiǎn)單的,匹配所有文檔,在沒(méi)有指定查詢方式時(shí),它是默認(rèn)的查詢

match:全文搜索+精確查詢,在執(zhí)行查詢前,它將用正確的分析器去分析查詢字符串

multi_match :在多個(gè)字段上執(zhí)行相同的match語(yǔ)句

range:查詢找出落在指定區(qū)間的數(shù)字或時(shí)間

term:精確值匹配,查詢對(duì)于輸入的文本不分析,所以它將給定的值進(jìn)行精確查詢

terms:?查詢和term一樣,允許多值進(jìn)行匹配

exists:指定字段的值是否存在

missing :指定字段的值是否沒(méi)有

(4) .合并查詢語(yǔ)句

bool : 將多查詢組合在一起

must: 文檔?必須?匹配這些條件才能被包含進(jìn)來(lái)。

must_not:文檔必須不匹配這些條件才可以被包含進(jìn)來(lái)

Should:?如果滿足這些語(yǔ)句中的任意語(yǔ)句,將增加?_score?,否則,無(wú)任何影響。它們主要用于修正每個(gè)文檔的相關(guān)性得分

filter:?必須匹配,但它以不評(píng)分、過(guò)濾模式來(lái)進(jìn)行。這些語(yǔ)句對(duì)評(píng)分沒(méi)有貢獻(xiàn),只是根據(jù)過(guò)濾標(biāo)準(zhǔn)來(lái)排除或包含文檔

在實(shí)際開(kāi)發(fā)過(guò)程中,會(huì)根據(jù)不同的業(yè)務(wù),會(huì)出現(xiàn)各種不同程度的查詢語(yǔ)句和組合語(yǔ)句

四.倒排索引

倒排索引是搜索引擎的核心,主要作用快速搜索;在搜索引擎中,每個(gè)文檔都有一個(gè)對(duì)應(yīng)的文檔ID,文檔內(nèi)容被表示為一系列關(guān)鍵詞的集合

參考文檔:elasticsearch 權(quán)威指南

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容