Elasticsearch中的分析和分析器應用方式

2021-10-06 20:49:34 字數 4789 閱讀 7488

我的elasticsearch系列文章,逐漸更新中,歡迎關注

0a.關於elasticsearch及例項應用

00.solr與elasticsearch對比

01.elasticsearch能做什麼?

02.elastic stack功能介紹

03.如何安裝與設定elasticsearch api

04.如果通過elasticsearch的head外掛程式建立索引_crud操作

05.elasticsearch多個例項和head plugin使用介紹

06.當elasticsearch進行文件索引時,它是如何工作的?

07.elasticsearch中的對映方式—簡潔版教程

08.elasticsearch中的分析和分析器應用方式

09.elasticsearch中構建自定義分析器

10.kibana科普-作為elasticsearhc開發工具

11.elasticsearch查詢方法

12.elasticsearch全文查詢

13.elasticsearch查詢-術語級查詢

15.使用django進行elasticsearch的簡單方法

16.關於elasticsearch的6件不太明顯的事情

17.使用python的初學者elasticsearch教程

18.用elasticsearch索引mongodb,乙個簡單的自動完成索引專案

19.kibana對elasticsearch的實用介紹

20.不和諧如何索引數十億條訊息

21.使用django進行elasticsearch的簡單方法

另外elasticsearch入門,我強烈推薦elasticsearch入門教程和這篇優秀的rest api設計指南 給你,這兩個指南都是非常想盡的入門手冊。

介紹在本系列的第乙個部落格中,我們看到了在elasticsearch中對文件建立索引時的反向索引計算,而在第二個部落格中,我們看到了elasticsearch中的對映基礎。現在,在此部落格中,我們將詳細介紹elasticsearch的分析部分,如何完成以及如何定製分析。

1.分析過程說明

為了了解elasticsearch中的分析過程及其需求,我們需要對

inverted index

elasticsearch中的建立進行更深入的了解。我們在階段02的部落格01中討論的關於

inverted index

建立的內容是基本版本,在這裡讓我為倒排索引建立場景新增一些複雜性。

當我們將這些文件索引到elasticsearch時,流程如下:

現在讓我解釋反向索引建立之前的每個階​​段:

1.1字元過濾器

字元過濾器具有對提供給他們的輸入文字執行新增,刪除或替換操作的能力。為了更清楚地理解它,如果輸入字串包含重複出現的拼寫錯誤的單詞,而我們需要用正確的單詞替換它,那麼我們可以使用字元過濾器對此進行相同的處理。此過濾器最常見的應用之一是

html

「the」,」auto」,」generation」,」is」,」a」,」success」

在這裡我們可以看到令牌中沒有html標記。同樣,嘗試不帶的上述curl請求,

「char_filter」:[「html_strip」]

然後看看有什麼不同。

1.2分詞器

從「字元」過濾器轉換後的輸入文字將傳遞到令牌處理程式。令牌生成器會將輸入文字拆分為特定字元處的單個令牌(或術語)。elasticsearch中的預設標記器是「標準標記器」,它使用基於語法的標記化技術,該技術不僅可以擴充套件到英語,還可以擴充套件到許多其他語言。

讓我們在下面看到乙個標準令牌生成器的示例:

在響應中,您可以看到文字分為以下標記:

「 the」,「 auto」,「 generation」,「 is」,「 a」,「 success」

在這裡,只要有空格和連字元(-),單詞就會被拆分。

注意:有不同型別的標記器,用於不同的目的。在某些用例中,我們可能不需要拆分特殊字元(例如,在使用電子郵件id或url的情況下),因此為了滿足此類需求,我們可以使用「 uax url email tokenizer」等標記器。可以在此處找到elasticsearch提供的標記器列表

響應中生成的令牌如下所示:

「 the」,「 auto」,「 generation」,「 is」,「 a」,「 success」

請注意,每個標記現在都小寫了。這就是小寫令牌過濾器對令牌的作用。

有關elasticsearch隨附的令牌過濾器的列表

在elasticsearch中,令牌過濾器最常見的用例之一是向單詞新增同義詞。從本質上講,這意味著可以使用此過濾器將單詞對映到其同義詞,並且每當我們搜尋同義詞時,都會出現包含基礎單詞的文件。我們將在以後的部落格中看到此方法的應用。

2.分析儀

上一節介紹了elasticsearch分析文件中欄位內容的過程。正如在上一節中提到的,有幾種型別的字元過濾器,令牌化器和令牌過濾器可用,我們應該根據遇到的用例明智地選擇它們。這三個元件(字元過濾器,令牌生成器和令牌過濾器)的組合稱為分析器。elasticsearch提供了幾種型別的內建分析器,用於處理最常見的用例。例如,elasticsearch的預設分析器標準分析器是標準令牌生成器和兩個令牌過濾器(標準令牌過濾器,小寫和停止令牌過濾器)的組合。同樣,根據字元過濾器的組合,可以使用多種分析儀,

分析儀的總體結構如下所示:

我們還可以通過選擇所需的過濾器和標記器來製作自定義分析器。我們將在本系列的下乙個部落格中看到定製分析器的製作。

3.分析階段

現在我們對什麼是分析以及什麼是分析器有了清晰的了解,讓我們進入在elasticsearch中發生的分析的兩個階段,即索引時間分析和搜尋時間分析。

3.1索引時間分析

讓我們考慮以下文件進行索引

這整個過程發生在索引時間中,因此發生在名稱索引時間分析中。

3.2搜尋時間分析

顧名思義,搜尋時間分析將在搜尋時發生。但是有乙個區別,就是這種分析是在查詢上進行的,具體取決於所使用的查詢。

3.2.1術語查詢-情況1

考慮以下查詢:

curl -xpost localhost:9200/testindex-0203/testtype/_search -d 『}}』

如果我們對索引「 testindex-0203」執行此查詢,它將返回被索引的文件作為結果。標記「名稱」存在於反向索引中,並再次對映到文件1。因此,當我們搜尋術語「名稱」時,它將查詢反向索引,並且由於找到了該術語,因此相應的文件被提取為結果。

3.2.2術語查詢-案例2

現在考慮具有相同「條件」查詢的另一種情況,如下所示:

curl -xpost localhost:9200/testindex-0203/testtype/_search -d 『}}』

在這裡,我們使用相同的術語查詢來進行查詢,但是對於搜尋關鍵字使用不同的大小寫,其現在是「名稱」而不是「名稱」。現在發生了一些有趣的事情,此搜尋不會給我們找到任何檔案。這種奇怪行為的原因是,倒排索引中不存在「名稱」,因此沒有要顯示的文件。

因此,對於「術語」查詢,不允許對搜尋關鍵字進行任何分析。

3.2.3術語查詢-情況3

讓我們考慮術語查詢的另一種情況以檢視此行為,這是查詢

curl -xpost localhost:9200/testindex-0203/testtype/_search -d 『}}』

在上述情況下,沒有分析搜尋關鍵字,因此,elasticsearch在反向索引中尋找令牌「我的名字」。並且由於此類術語不存在,因此針對上述查詢,elasticsearch也將返回零結果。

在elasticsearch中就是「條件」查詢的情況。讓我們嘗試乙個不同的查詢,稱為match query並檢查輸出。

3.2.4匹配查詢-情況1

考慮以下查詢:

curl -xpost localhost:9200/testindex-0203/testtype/_search -d 『}}』

這將返回帶有索引文件的響應,因為反向索引中存在「名稱」令牌。

3.2.5匹配查詢-情況2

curl -xpost localhost:9200/testindex-0203/testtype/_search -d 『}}』

在這裡,當我們對案例2使用「條件」查詢時,沒有任何響應。但是,對於匹配查詢,無論在索引編制時將什麼分析應用於要查詢的字段(文字),都將對搜尋關鍵字(「名稱」)進行完全相同的分析。這使搜尋關鍵字經歷「標準分析」,並且搜尋關鍵字「名稱」更改為「名稱」(由於標準分析器中的小寫標記過濾器)。這個新的搜尋關鍵字「名稱」存在於反向索引中,並且響應也將具有相應的文件。

3.2.6匹配查詢-情況3

curl -xpost localhost:9200/testindex-0203/testtype/_search -d 『}}』

這裡給出的搜尋關鍵字是「my name」,經過標準分析後,它將轉換為關鍵字「我的名字」和「名字」。這兩個關鍵字都存在於反向索引中,因此將文件作為響應返回。

因此,根據查詢型別,搜尋關鍵字將在搜尋時間內進行分析(與查詢的字段相同)。這稱為搜尋時間分析。

結論在此部落格中,我介紹了分析器的基本組成部分以及elasticsearch中發生的分析型別。在下乙個部落格中,我們將看到如何針對非常特定的用例構建自己的自定義分析器。

elasticsearch中的mapping簡介

elasticsearch 以下簡稱es 是沒有模式 schema 的,當我們執行以下命令 filter的功能很容易理解 乙個filter就是乙個轉換資料的方法,輸入乙個字串,這個方法返回另乙個字串,比如乙個將字串轉為小寫的方法就是乙個filter很好的例子。乙個analyzer由一組順序排列的fi...

elasticsearch中rollover的用法

滾動索引一般可以與索引模板結合使用,實現按一定條件自動建立索引。設定rollover之後,滿足條件後,會自動新建索引,將索引別名轉向新索引。當現有的索引太久或者太大時,往往使用rollover index建立新索引。新建索引模板,模板內容如下 put template mytemplate type...

ElasticSearch中的date型別

1.1 date 資料型別 elasticsearch 資料是以json格式儲存的,而json中是並沒有date資料型別,因此 elasticsearch 中雖然有date型別,但在展示時卻要轉化成另外的格式。date型別在 elasticsearch 展示的格式有下面幾種 utc utc univ...