Elasticsearch學習筆記
- 2020 年 7 月 5 日
- 筆記
- 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: //www.elastic.co/cn/downloads/elasticsearch
Kibana: //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分詞器包
解壓文件,將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]