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