1. 程式人生 > 實用技巧 >Elasticsearch學習筆記

Elasticsearch學習筆記

許多年前,一個剛結婚的名叫 Shay Banon 的失業開發者,跟著他的妻子去了倫敦,他的妻子在那裡學習廚師。 在尋找一個賺錢的工作的時候,為了給他的妻子做一個食譜搜尋引擎,他開始使用 Lucene 的一個早期版本。

直接使用 Lucene 是很難的,因此 Shay 開始做一個抽象層,Java 開發者使用它可以很簡單的給他們的程式新增搜尋功能。 他釋出了他的第一個開源專案 Compass。

後來 Shay 獲得了一份工作,主要是高效能,分散式環境下的記憶體資料網格。這個對於高效能,實時,分散式搜尋引擎的需求尤為突出, 他決定重寫 Compass,把它變為一個獨立的服務並取名 Elasticsearch。

第一個公開版本在2010年2月釋出,從此以後,Elasticsearch 已經成為了 Github 上最活躍的專案之一,他擁有超過300名 contributors(目前736名 contributors )。 一家公司已經開始圍繞 Elasticsearch 提供商業服務,並開發新的特性,但是,Elasticsearch 將永遠開源並對所有人可用。

據說,Shay 的妻子還在等著她的食譜搜尋引擎…​

Elasticsearch是Java開發的基於Lucene的搜尋伺服器。它提供了一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面。

Elasticsearch的作用:1.存放海量資料。

                    2.實現快速查詢。

                    3.實現高亮查詢。 

                    4.支援模糊、精確查詢。

Elasticsearch的使用場景:1.elk的日誌場景。

                       2.業務(海量)資料的搜尋。

說到Elasticsearch必須提到ELK

E:Elasticsearch  存放資料的倉庫
L:LogStach 幫助我們收集各種情況下的日誌(文字日誌、資料庫日誌) 把資料寫入我們的es資料庫
K:Kinbana  視覺化工具,可以檢視報表以及通過搜尋檢視我們資料庫所有的資料

下載地址:

Elasticsearch: https://www.elastic.co/cn/downloads/elasticsearch
Kibana: https://www.elastic.co/cn/downloads/kibana

下載完成之後雙擊各自bin目錄下的bat檔案

基本操作:

1.需要指定id

PUT dbindex/userinfo/1

2.自動生成id

POST dbindex/userinfo

3.代表文件的id

GET dbindex/userinfo/1

4.檢視所有資料

GET dbindex/userinfo/_search

5.刪除索引(資料庫)

DELETE dbndex

建立索引,指定資料的資料型別.如果給欄位的型別是keyword型別,則相當於服務沒有幫助我們去分詞,相當於自己建立了一個字典。如果是text型別則會幫助我們分詞。

通過關鍵字查詢資料:

GET /secound/_doc/_search?q=name:貓

ik分詞器

如上,elasticsearch的預設分詞器無法識別中文中"一隻"這樣的詞彙,而是簡單的將每個字拆完分為一個詞。我們可以使用第三方分詞器達到我們想要的效果。

下載ik分詞器包

https://https://github.com/medcl/elasticsearch-analysis-ik/releases

解壓檔案,將elasticsearch-analysis-ik檔案中的檔案拷貝到elasticsearch檔案下的plugins檔案中(一定要在plugins中新建一個ik命名的檔案,ik分詞器的版本和elasticsearch的版本一定要一樣)

建一個自定義分詞的字典檔案,並做好配置,然後重啟elasticsearch.

我在我的字典檔案(data.dic)中寫了:一隻橘貓

查詢:

k_max_word:會將文字做最細粒度的拆分,例如「一隻橘貓」會被拆分為「一隻橘貓、一隻、一、只、橘、貓」,會窮盡各種可能的組合
ik_smart:會將文字做最粗粒度的拆分,例如「一隻橘貓」會被拆分為「一隻橘貓」

有一首歌叫南方姑娘很好聽,我們可以先用elasticsearch的預設分詞器查檢視。

將南方姑娘加入我們自定義的分詞字典檔案中,再來查詢:

.

elasticsearch的倒排索引

有一張表還有如下資料

首先說一下正排索引:正排索引就是我們可以根據id查詢指定的資料,也可理解為通過人名(在不重複的情況下)找到指定的人。

倒排索引:如下.不同的條件查詢的資料不同。

在elasticsearch中也一樣,elasticsearch會建倒排索引。將每一行資料看成為一個document。每個document都有一個docid。那麼給這些document建立的倒排索引就是:

姓名
[key]     [value]
橘貓       [1,2]
花貓       [3]

年齡
[key]      [value]
17         [1,2]
18         [3]
官方學習文件:https://www.elastic.co/guide/en/elasticsearch/reference/7.x/getting-started.html