一、官網和下載下傳
官網: https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
Spring Data Elasticsearch - 參考文檔:
https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#preface.metadata
ES曆史版本下載下傳位址:https://www.elastic.co/cn/downloads/past-releases
《Elasticsearch 權威指南》中文版: https://www.elastic.co/guide/cn/index.html
1、 dockers下安裝ElasticSearch
二、入門
1、Spring Boot與Elasticsearch的對應版本
Elasticsearch更新非常快,最新的7.x版本已經不支援自定義類型了,預設以**“_doc”**作為類型,一個索引隻能有一個類型。
為了避免使用的Elasticsearch版本和SpringBoot采用的版本不一緻導緻的問題,盡量使用一緻的版本。下表是對應關系:
2、目錄結構
Windows 版的 Elasticsearch 壓縮包,解壓即安裝完畢,解壓後的 Elasticsearch 的目錄結構如下 :
3、反向索引
4、基本增删改查
- elasticsearch7常見查詢(term、match、bool、filter)
- ES文檔常見增删改查操作
5、使用kinbana操作
I、索引增删改
(1)建立索引
PUT lease_zh_202211
(2)添加索引結構
PUT /lease_zh_202211/_mapping
{
"properties": {
"content": {
"type": "text",
"analyzer": "whitespace",
"fields": {
"spy": {
"type": "text",
"analyzer": "ik_smart"
},
"standard": {
"type": "text",
"analyzer": "standard"
},
"fpy": {
"type": "text",
"analyzer": "ik_smart"
}
}
},
"path": {
"type": "keyword",
"index": false
},
"platform": {
"type": "keyword"
},
"summary": {
"type": "text",
"term_vector": "with_positions_offsets",
"similarity": "BM25",
"analyzer": "standard",
"fielddata": true
},
"time": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
},
"title": {
"type": "text",
"term_vector": "with_positions_offsets",
"similarity": "BM25",
"analyzer": "standard"
}
}
}
(3)删除索引
DELETE lease_zh_202211
(4)修改mappings字段結構(不支援)
“ es不支援直接修改mappings字段結構,可以通過_reindex 重建索引,方式修改”
II、分詞器
(1)将某一字段設定多個分詞器
PUT /lease_zh_202211/_mapping
{
"properties": {
"title": {
"type": "text",
"analyzer": "whitespace",
"fields": {
"spy": {
"type": "text",
"analyzer": "ik_smart"
},
"standard": {
"type": "text",
"analyzer": "standard"
},
"fpy": {
"type": "text",
"analyzer": "ik_smart"
}
}
}
}
}
(2)檢視分詞器解析效果
GET /index_kk_202109/_analyze
{
"field": "title",
"text": "The quick Brown Foxes."
}
III、新增字段
(1)新增普通字段
PUT expert_auditing/_mapping
{ "properties":{
"majorAchievement": {
"type": "text"
}
}
}
(2)新增list字段
PUT expert_edit_record/_mapping
{ "properties":{
"labelInfoList": {
"properties": {
"label": {
"type": "keyword"
},
"value": {
"type": "keyword"
}
}
}
}
}
IV、聚合查詢
(1)
POST /expert/_search?size=0
{
"aggs": {
"types_count": {
"value_count": {
"field": "categoryInfoList.category1Agg"
}
}
}
}
三、基本概念
1、文檔(Document)
我們知道Java是面向對象的,而Elasticsearch是面向文檔的,也就是說文檔是所有可搜尋資料的最小單元。ES的文檔就像MySql中的一條記錄,隻是ES的文檔會被序列化成json格式,儲存在Elasticsearch中;
這個json對象是由字段組成,字段就相當于Mysql的列,每個字段都有自己的類型(字元串、數值、布爾、二進制、日期範圍類型);
當我們建立文檔時,如果不指定字段的類型,Elasticsearch會幫我們自動比對類型;
每個文檔都有一個ID,類似MySql的主鍵,咱們可以自己指定,也可以讓Elasticsearch自動生成;
文檔的json格式支援數組/嵌套,在一個索引(資料庫)或類型(表)裡面,你可以存儲任意多的文檔。
注意:雖然在實際存儲上,文檔存在于某個索引裡,但是文檔必須被賦予一個索引下的類型才可以。
2、類型(Type)
類型就相當于MySql裡的表,我們知道MySql裡一個庫下可以有很多表,最原始的時候ES也是這樣,一個索引下可以有很多類型,但是從6.0版本開始,type已經被逐漸廢棄,但是這時候一個索引仍然可以設定多個類型,一直到7.0版本開始,一個索引就隻能建立一個類型了(_doc)。這一點,大家要注意,網上很多資料都是舊版本的,沒有對這點進行說明。
3、索引(Index)
索引就相當于MySql裡的資料庫,它是具有某種相似特性的文檔集合。反過來說不同特性的文檔一般都放在不同的索引裡;
索引的名稱必須全部是小寫;
在單個叢集中,可以定義任意多個索引;
索引具有mapping和setting的概念,mapping用來定義文檔字段的類型,setting用來定義不同資料的分布。
除了這些常用的概念,我們還需要知道節點概念的作用,是以咱們接着往下看!
4、節點(node)
一個節點就是一個ES執行個體,其實本質上就是一個java程序;
節點的名稱可以通過配置檔案配置,或者在啟動的時候使用-E node.name=ropledata指定,預設是随機配置設定的。建議咱們自己指定,因為節點名稱對于管理目的很重要,咱們可以通過節點名稱确定網絡中的哪些伺服器對應于ES叢集中的哪些節點;
ES的節點類型主要分為如下幾種:
Master Eligible節點:每個節點啟動後,預設就是Master Eligible節點,可以通過設定node.master: false 來禁止。Master Eligible可以參加選主流程,并成為Master節點(當第一個節點啟動後,它會将自己選為Master節點);注意:每個節點都儲存了叢集的狀态,隻有Master節點才能修改叢集的狀态資訊。
Data節點:可以儲存資料的節點。主要負責儲存分片資料,利于資料擴充。
Coordinating 節點:負責接收用戶端請求,将請求發送到合适的節點,最終把結果彙集到一起
注意:每個節點預設都起到了Coordinating node的職責。一般在開發環境中一個節點可以承擔多個角色,但是在生産環境中,還是設定單一的角色比較好,因為有助于提高性能。
5、分片(shard)
了解分布式或者學過mysql分庫分表的應該對分片的概念比較熟悉,ES裡面的索引可能存儲大量資料,這些資料可能會超出單個節點的硬體限制。
為了解決這個問題,ES提供了将索引細分為多個碎片的功能,這就是分片。這裡咱們可以簡單去了解,在建立索引時,隻需要咱們定義所需的碎片數量就可以了,其實每個分片都可以看作是一個完全功能性和獨立的索引,可以托管在叢集中的任何節點上。
疑問二:分片有什麼好處和注意事項呢?
通過分片技術,咱們可以水準拆分資料量,同時它還支援跨碎片(可能在多個節點上)分布和并行操作,進而提高性能/吞吐量;
ES可以完全自動管理分片的配置設定和文檔的聚合來完成搜尋請求,并且對使用者完全透明;
主分片數在索引建立時指定,後續隻能通過Reindex修改,但是較麻煩,一般不進行修改。
6、副本分片(replica shard)
熟悉分布式的朋友應該對副本對概念不陌生,為了實作高可用、遇到問題時實作分片的故障轉移機制,ElasticSearch允許将索引分片的一個或多個複制成所謂的副本分片。
疑問三:副本分片有什麼作用和注意事項呢?
當分片或者節點發生故障時提供高可用性。是以,需要注意的是,副本分片永遠不會配置設定到複制它的原始或主分片所在的節點上;
可以提高擴充搜尋量和吞吐量,因為ES允許在所有副本上并行執行搜尋;
預設情況下,ES中的每個索引都配置設定5個主分片,并為每個主分片配置設定1個副本分片。主分片在建立索引時指定,不能修改,副本分片可以修改。
四、核心功能
(一)、EElasticSearch核心之——Mapping設定
- https://www.jianshu.com/p/c994e8fc86d8
(二)、elasticsearch實戰之xpack安裝、head加密與xpack使用
- xpack介紹和使用
五、拓展
1、elasticsearch 安裝 ik 分詞器
下載下傳位址:https://download.csdn.net/download/qq_45463633/83799109
解壓,上傳到 /elasticsearch-7.8.1/plugins 目錄下
2、elasticsearch 安裝 kibana
- 最新版下載下傳位址:https://www.elastic.co/cn/downloads/kibana
- 曆史版本下載下傳位址:https://download.csdn.net/download/qq_45463633/83805810
- 官方文檔位址:https://www.elastic.co/guide/en/kibana/7.5/index.html
- 源碼位址:https://github.com/elastic/kibana/tree/v7.5.2
注意 :kibana 版本要低于 elasticsearch 版本
2.1 es伺服器需配置:
cluster.name: my-application
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]
http.cors.enabled: true #開啟跨域
http.cors.allow-origin: "*" #全部放開
2.2 連接配接遠端es伺服器, kibana 需配置:(es伺服器安裝在本機則無需配置)
(1)、進入kinbna的conf下的kibna.yml目錄下,基本配置如下
server.port: 5601 # 端口号
server.host: "0.0.0.0" # kibana 安裝伺服器 IP ,0.0.0.0表示是以ip都可以通路
elasticsearch.hosts: ["http://172.16.17.88:9200"] # http://172.16.17.88:920 是安裝 ES 的伺服器
i18n.locale: "zh-CN" # 開啟中文,預設英文
(2)、如果開啟xpack,請進行安全認證配置
#elasticsearch開啟的安全認證,導緻kibana必須配置賬号密碼才能連接配接elasticsearch。
elasticsearch.username: "elastic"
elasticsearch.password: "123456"
#ES7.X 設定 xpack
xpack.security.enabled: true
xpack.reporting.encryptionKey: "a_random_string"
- elasticsearch-7.x使用xpack進行安全認證
3、安裝可視化界面 elasticsearch-head
使用前提:需要安裝nodejs
nodeJS 安裝教程:https://blog.csdn.net/qq_41787812/article/details/126140289
3.1 下載下傳位址
項目 | 說明 |
---|---|
開源/閉源 | 開源 |
源碼管理位址 | https://github.com/mobz/elasticsearch-head |
License類别 | Apache License 2.0 |
目前穩定版本 | 5.0.0(2018/4/10) |
開發語言 | Javascript |
下載下傳位址:github release | https://github.com/mobz/elasticsearch-head/releases |
3.2 安裝
解壓即可(盡量将ElasticSearch相關工具放在統一目錄下)
3.3 啟動
cd elasticsearch-head
# 安裝依賴
npm install
# 啟動
npm run start
# 通路
http://localhost:9100/
安裝依賴
運作
通路
存在跨域問題(隻有當兩個頁面同源,才能互動)
同源(端口,主機,協定三者都相同)
跨越相關參考: https://blog.csdn.net/qq_38128179/article/details/84956552
開啟跨域(在elasticsearch解壓目錄config下elasticsearch.yml中添加)
# 開啟跨域
http.cors.enabled: true
# 所有人通路
http.cors.allow-origin: "*"
重新開機elasticsearch
4、 logstash安裝和詳解
- logstash安裝
- Logstash詳解
五、碰到的問題
1、es使用内置IK分詞器
2、elasticsearch安裝ik分詞器後啟動報錯
3、安裝啟動 elasticsearch 常見問題以及解決辦法
# 問題 1
max number of threads [2047] for user [wlsadmin] is too low, increase to at least [4096]
# 解決
vim /etc/security/limits.d/20-nproc.conf
* soft nproc 2047 修改為 * soft nproc 4096
# 問題 2
max virtual memory areas vm.max_map_count [65535] is too low, increase to at least [262144]
# 解決
vim /etc/sysctl.conf
新增 vm.max_map_count=262144
六、ES性能優化
- ES性能優化之查詢優化筆記(一)
- ES性能優化之寫入優化筆記(一)
- ES性能優化之記憶體優化
- 優化從索引片段,記憶體設定,副本,分片,日志等方面入手
七、常用屬性和用法
I、一些常用屬性
1、elasticsearch中store設定true和false的差別
參考
設定索引的時候,我們給某些字段的store屬性設定為true,在查詢時,請求中可以攜帶stored_fields參數,指定某些字段,最後,這些字段會被包含在傳回的結果中。如果請求中攜帶的字段沒有被儲存,将會被忽略。
2、elasticsearch之字段field參數
elasticsearch之字段field參數
3、Elasticsearch:fielddata 介紹
參考
對字段類型為text的字段,加入"fielddata"=true,就可以對這個項進行統計了。
II、ES一些用法
- elasticsearchRestTemplate search 精準查詢和模糊查詢即不區分大小寫
- setTrackTotalHits 設定顯示查詢總數
筆記
- 尚矽谷es筆記
- 狂神es筆記
- es筆記超詳細
- springboot整合elasticsearch(1)
- springboot整合elasticsearch(2)
- 批量導入資料(Postman與Kibana)