Springboot2.x整合ElasticSearch7.x實戰(zhàn)(二)
本教程是系列教程,對于初學者可以對 ES 有一個整體認識和實踐實戰(zhàn)。
還沒開始的同學,建議先讀一下系列攻略目錄:Springboot2.x整合ElasticSearch7.x實戰(zhàn)目錄
本篇幅是繼上一篇 Springboot2.x整合ElasticSearch7.x實戰(zhàn)(一) ,適合初學 Elasticsearch 的小白,可以跟著整個教程做一個練習。
第三章 分詞器安裝
使用搜索,少不了使用分詞器,elasticsearch 自帶了一些簡單分詞器,也可以使用第三方分詞器插件,如 ik、pinyin 等。
Standard?Analyzer?-?默認分詞器,按詞切分,小寫處理
Simple?Analyzer?-?按照非字母切分(符號被過濾),?小寫處理
Stop?Analyzer?-?小寫處理,停用詞過濾(the,a,is)
Whitespace?Analyzer?-?按照空格切分,不轉(zhuǎn)小寫
Keyword?Analyzer?-?不分詞,直接將輸入當作輸出
Patter?Analyzer?-?正則表達式,默認\W+(非字符分割)
Language?-?提供了30多種常見語言的分詞器
Customer?Analyzer?自定義分詞器
ik分詞器插件安裝
下載和elasticsearch版本一致
教程使用的是 7.7.0
版本。
準備 ik 目錄,
cd plugins && mkdir ik
下載
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.7.0/elasticsearch-analysis-ik-7.7.0.zip 有些地方從github下載網(wǎng)絡不好,我在課件里有插件壓縮包。
解壓到對應ik目錄
解壓文件到目錄 elasticsearch-7.7.0/plugins/ik
下。
重啟es,查看是否安裝成功
curl http://localhost:9200/_cat/plugins
rest 實例:
拼音分詞器插件安裝
下載和elasticsearch版本一致
教程使用的是 7.7.0
版本。
準備 ik 目錄,
cd plugins && mkdir pinyin
下載
wget https://github.com/medcl/elasticsearch-analysis-pinyin/archive/v7.7.0.zip 有些地方從github下載網(wǎng)絡不好,我在課件放了插件的壓縮包。
解壓到對應pinyin目錄
解壓文件到目錄 elasticsearch-7.7.0/plugins/pinyin
下。
重啟es,查看是否安裝成功
curl http://localhost:9200/_cat/plugins

更多擴展詞庫
同義詞詞庫
https://github.com/ginobefun/elasticsearch-dynamic-synonym/releases
有些情況會使用我們自己的分詞服務,后面代碼中會講解使用方式。
第四章 Elasticsearch核心概念
Elasticsearch核心概念-相關(guān)術(shù)語解析
Cluster
Elasticsearch 集群,由一臺或多臺的Elasticsearch 節(jié)點(Node)組成。
Node
Elasticsearch 節(jié)點,可以認為是Elasticsearch的服務進程,在同一臺機器上啟動兩個Elasticsearch實例(進程),就是兩個node節(jié)點。
Index
索引,具有相同結(jié)構(gòu)的文檔的集合,類似于關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫實例(6.0.0版本type廢棄后,索引的概念下降到等同于數(shù)據(jù)庫表的級別)。一個集群中可以有多個索引。
Type
類型,在索引中內(nèi)進行邏輯細分,在新版的Elasticsearch中已經(jīng)廢棄。
關(guān)于 type 廢棄問題,如果你需要維護低版本 elasticsearch(在7.0.0、6.*、5.6版本變化較大),一定要閱讀這篇官方英文文檔 https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html
Document
文檔,Elasticsearch中的最小的數(shù)據(jù)存儲單元,JSON數(shù)據(jù)格式,很多相同結(jié)構(gòu)的文檔組成索引。文檔類似于關(guān)系型數(shù)據(jù)庫中表內(nèi)的一行記錄。
舉個例子,一篇新聞的文檔數(shù)據(jù)。
news?document
{
?"id":"1",
?"title":"China?is?a?great?country",
?"content":"I?love?China."
}
Shard
分片,單個索引切分成多個shard,分布在多臺Node節(jié)點上存儲??梢岳胹hard很好的橫向擴展,以存儲更多的數(shù)據(jù),同時shard分布在多臺node上,可以提升集群整體的吞吐量和性能。在創(chuàng)建索引的時候可以直接指定分片的數(shù)量即可,一旦指定就不能再修改了。
Replica
索引副本,完全拷貝shard的內(nèi)容,一個shard可以有一個或者多個replica,replica就是shard的數(shù)據(jù)拷貝,以提高冗余。
replica承擔三個任務:
shard故障或者node宕機時,其中的一個replica可以升級成shard
replica保證數(shù)據(jù)不丟失,保證高可用
replica可以分擔搜索請求,提高集群的吞吐和性能
shard 的全稱叫 primary shard,replica 全稱叫 replica shard,primary shard 數(shù)量在創(chuàng)建索引時指定,后期不能修改,replica shard 后期可以修改。默認每個索引的 primary shard 值為5,replica shard 值為1,含義是5個primary shard,5個 replica shard,共10個 shard。因此 Elasticsearch 最小的高可用配置是2臺服務器。

理解倒排索引
例如倒排索引等內(nèi)容
倒排索引相關(guān)術(shù)語
倒排索引(Inverted Index)是整個搜索的核心,倒排索引是實現(xiàn)“單詞-文檔矩陣”的一種具體存儲形式,通過倒排索引,可以根據(jù)單詞快速獲取包含這個單詞的文檔列表。倒排索引主要由兩個部分組成:“單詞詞典”和“倒排文件”。
單詞詞典(Lexicon):常索引單位是單詞,單詞詞典是由文檔集合中出現(xiàn)過的所有單詞構(gòu)成的字符串集合,單詞詞典內(nèi)每條索引項記載單詞本身的一些信息以及指向“倒排列表”的指針。
倒排列表(PostingList):倒排列表記載了出現(xiàn)過某個單詞的所有文檔的文檔列表及單詞在該文檔中出現(xiàn)的位置信息,每條記錄稱為一個倒排項(Posting)。根據(jù)倒排列表,即可獲知哪些文檔包含某個單詞。
倒排文件(Inverted File):所有單詞的倒排列表往往順序地存儲在磁盤的某個文件里,這個文件即被稱之為倒排文件,倒排文件是存儲倒排索引的物理文件。
概念關(guān)系:

簡單倒排索引實例
倒排索引從邏輯結(jié)構(gòu)和基本思路上來講非常簡單。下面我們通過具體實例來進行說明,使得大家能夠?qū)Φ古潘饕幸粋€宏觀而直接的感受。
假設有五個文檔:

通過分詞后,每個文檔就轉(zhuǎn)換為由單詞序列構(gòu)成的數(shù)據(jù)流,為了系統(tǒng)后續(xù)處理方便,需要對每個不同的單詞賦予唯一的單詞編號,同時記錄下哪些文檔包含這個單詞,在如此處理結(jié)束后,我們可以得到最簡單的倒排索引。

事實上,索引系統(tǒng)還可以記錄除此之外的更多信息。下圖是一個相對復雜些的倒排索引,與上圖的基本索引系統(tǒng)比,在單詞對應的倒排列表中不僅記錄了文檔編號,還記載了單詞頻率信息(TF),即這個單詞在某個文檔中的出現(xiàn)次數(shù),之所以要記錄這個信息,是因為詞頻信息在搜索結(jié)果排序時,計算查詢和文檔相似度是很重要的一個計算因子,所以將其記錄在倒排列表中,以方便后續(xù)排序時進行分值計算。

最后,實用的倒排索引還可以記載更多的信息,上圖所示索引系統(tǒng)除了記錄文檔編號和單詞頻率信息外,額外記載了兩類信息,即每個單詞對應的“文檔頻率信息”(以及在倒排列表中記錄單詞在某個文檔出現(xiàn)的位置信息。
“文檔頻率信息”代表了在文檔集合中有多少個文檔包含某個單詞,之所以要記錄這個信息,其原因與單詞頻率信息一樣,這個信息在搜索結(jié)果排序計算中是非常重要的一個因子。而單詞在某個文檔中出現(xiàn)的位置信息并非索引系統(tǒng)一定要記錄的,在實際的索引系統(tǒng)里可以包含,也可以選擇不包含這個信息,之所以如此,因為這個信息對于搜索系統(tǒng)來說并非必需的,位置信息只有在支持“短語查詢”的時候才能夠派上用場。
參考:https://blog.csdn.net/hguisu/article/details/7969757

在看和分享是對我最大的鼓勵,我是 pub 哥,我們下期再見