天天看點

Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

一、官網和下載下傳

官網: 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采用的版本不一緻導緻的問題,盡量使用一緻的版本。下表是對應關系:

Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

2、目錄結構

Windows 版的 Elasticsearch 壓縮包,解壓即安裝完畢,解壓後的 Elasticsearch 的目錄結構如下 :

Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

3、反向索引

Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

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"
      }
    }
  }
}
           

三、基本概念

Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

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 目錄下

Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

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/
           

安裝依賴

Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

運作

Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

通路

存在跨域問題(隻有當兩個頁面同源,才能互動)

同源(端口,主機,協定三者都相同)

跨越相關參考: https://blog.csdn.net/qq_38128179/article/details/84956552

Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

開啟跨域(在elasticsearch解壓目錄config下elasticsearch.yml中添加)

# 開啟跨域
http.cors.enabled: true
# 所有人通路
http.cors.allow-origin: "*"
           
重新開機elasticsearch

4、 logstash安裝和詳解

  • logstash安裝
  • Logstash詳解

五、碰到的問題

1、es使用内置IK分詞器

2、elasticsearch安裝ik分詞器後啟動報錯

Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

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 設定顯示查詢總數
Elasticsearch7.x學習總結一、官網和下載下傳二、入門三、基本概念四、核心功能五、拓展五、碰到的問題六、ES性能優化七、常用屬性和用法

筆記

  • 尚矽谷es筆記
  • 狂神es筆記
  • es筆記超詳細
  • springboot整合elasticsearch(1)
  • springboot整合elasticsearch(2)
  • 批量導入資料(Postman與Kibana)

繼續閱讀