【ElasticSearch實戰】ElasticSearch 快速入門教程

ElasticSearch簡介

Elasticsearch 是一個開源的搜索引擎,建立在一個全文搜索引擎庫 Apache Lucene™ 基礎之上。 Lucene 可以說是當下最先進、高性能、全功能的搜索引擎庫—​無論是開源還是私有。

但是 Lucene 僅僅只是一個庫。爲了充分發揮其功能,你需要使用 Java 並將 Lucene 直接集成到應用程序中。 更糟糕的是,您可能需要獲得信息檢索學位才能瞭解其工作原理。Lucene 非常複雜。

Elasticsearch 也是使用 Java 編寫的,它的內部使用 Lucene 做索引與搜索,但是它的目的是使全文檢索變得簡單, 通過隱藏 Lucene 的複雜性,取而代之的提供一套簡單一致的 RESTful API。

然而,Elasticsearch 不僅僅是 Lucene,並且也不僅僅只是一個全文搜索引擎。 它可以被下面這樣準確的形容:

  • 一個分佈式的實時文檔存儲,每個字段 可以被索引與搜索
  • 一個分佈式實時分析搜索引擎
  • 能勝任上百個服務節點的擴展,並支持 PB 級別的結構化或者非結構化數據

Elasticsearch 將所有的功能打包成一個單獨的服務,這樣你可以通過程序與它提供的簡單的 RESTful API 進行通信, 可以使用自己喜歡的編程語言充當 web 客戶端,甚至可以使用命令行(去充當這個客戶端)。

就 Elasticsearch 而言,起步很簡單。對於初學者來說,它預設了一些適當的默認值,並隱藏了複雜的搜索理論知識。 它開箱即用 。只需最少的理解,你很快就能具有生產力。

隨着你知識的積累,你可以利用 Elasticsearch 更多的高級特性,它的整個引擎是可配置並且靈活的。 從衆多高級特性中,挑選恰當去修飾的 Elasticsearch,使它能解決你本地遇到的問題。

你可以免費下載,使用,修改 Elasticsearch。它在 Apache 2 license 協議下發布的, 這是衆多靈活的開源協議之一。Elasticsearch 的源碼被託管在 Github 上 github.com/elastic/elasticsearch

主要代表應用案例如下:

  • Wikipedia 使用 Elasticsearch 提供帶有高亮片段的全文搜索,還有 search-as-you-type 和 did-you-mean 的建議。
  • 衛報 使用 Elasticsearch 將網絡社交數據結合到訪客日誌中,爲它的編輯們提供公衆對於新文章的實時反饋。
  • Stack Overflow 將地理位置查詢融入全文檢索中去,並且使用 more-like-this 接口去查找相關的問題和回答。
  • GitHub 使用 Elasticsearch 對1300億行代碼進行查詢。

Elasticsearch 不僅僅爲巨頭公司服務。它也幫助了很多初創公司,比如 Datadog 和 Klout, Elasticsearch 幫助他們將想法用原型實現,並轉化爲可擴展的解決方案。Elasticsearch 能運行在你的筆記本電腦上,或者擴展到數百臺服務器上來處理PB級數據。

ElasticSearch 雲上支持免費全部商業版本
目前ElasticSearch 與國內外主流雲提供商阿里雲騰訊雲有深入合作,免費使用 Elastic 的全部商業功能!立即在阿里雲騰訊雲上使用 Elastic 的全部商業功能

主要應用業務場景

  • 智能搜索】 智能搜索系統,按主題、專題及時空三個維度,支持專題/批量/時空檢索等能力的智能檢索服務,如網站搜索、附近搜索等
  • 日誌分析】Elasticsearch、Kafka、Logstash、Kibana日誌分析架構,提供強大的搜索、統計、分析及可視化能力。
  • 日誌審計】採集應用系統、數據庫日誌,通過日誌搜索、風險告警、分析報表服務,解決數據盜取、越權訪問、信息泄露問題。
  • 數字警務室】結構化數據檢索:車牌號、時間、經緯度、卡口;向量檢索:人體、人臉、機動車、非機動車。

ElasticSearch安裝及運行

此處將介紹在window、Mac、Linux、docker下的安裝及運行注意事項,在此之前有Elastic的一些常用組件需要了解,包括 Elasticsearch、Kibana、Beats 和 Logstash(也稱爲 ELK Stack)。能夠安全可靠地獲取任何來源、任何格式的數據,然後實時地對數據進行搜索、分析和可視化。
Elastic軟件生態

  • ElasticSearch 是一個基於 JSON 的分佈式搜索和分析引擎本身;
  • Kibana 對 Elasticsearch 數據進行可視化;
  • Beats 是一個面向輕量型採集器的平臺,這些採集器可從邊緣機器發送數據。
  • Logstash 是動態數據收集管道,擁有可擴展的插件生態系統。

在window下安裝 Elasticsearch及運行

window安裝都比較簡單,下載安裝包,解壓即可;配置一些環境變量ES_HOME(可選),但前提需要安裝jdk1.8及以上;因爲Elasticsearch時由Java開發的;

  1. 下載Elasticsearch https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-windows-x86_64.zip 官方下載最新版本,截止發文時爲7.7.1版本!
  2. 解壓安裝包後運行
    進入軟件目錄bin目錄運行elasticsearch即可
    bin/elasticsearch(或bin\elasticsearch.bat在Windows上)

在Mac或Linux下安裝 Elasticsearch及運行

  1. 下載Elasticsearch for Linux版本並解壓
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.7.1-linux-x86_64.tar.gz.sha512 
tar -xzf elasticsearch-7.7.1-linux-x86_64.tar.gz
cd elasticsearch-7.7.1/ 

注意:

  • shasum 命令爲比較下載的.tar.gz檔案的SHA 和應該輸出的已發佈校驗和 elasticsearch-{version}-linux-x86_64.tar.gz: OK。
  • elasticsearch-7.7.1/ 此目錄稱爲$ES_HOME,可以配置系統環境變量;
  1. 下載Elasticsearch for Mac版本並解壓
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-darwin-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.1-darwin-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.7.1-darwin-x86_64.tar.gz.sha512 
tar -xzf elasticsearch-7.7.1-darwin-x86_64.tar.gz
cd elasticsearch-7.7.1/
  1. 使用Homebrew在macOS上安裝Elasticsearch
    Elastic發佈Homebrew公式,因此您可以使用Homebrew軟件包管理器安裝Elasticsearch 。
  • 要使用Homebrew進行安裝,您首先需要點擊Elastic Homebrew存儲庫:
brew tap elastic/tap
  • 點擊Elastic Homebrew存儲庫後,可以brew install用來安裝Elasticsearch的默認發行版(要安裝OSS發行版,請指定elastic/tap/elasticsearch-oss):
brew install elastic/tap/elasticsearch-full

在docker下安裝 Elasticsearch及運行

當然使用docker前,你同樣需要先安裝docker服務;這裏就不介紹如何安裝docker篇幅了,請參見我docker相關的文章

  • 獲取Elasticsearch鏡像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.7.1
  • docker運行單節點elasticsearch
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.7.1
  • 要在Docker中啓動並運行一個三節點的Elasticsearch集羣,可以使用Docker Compose, 創建一個docker-compose.yml文件:
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge

ElasticSearch測試

  • Linux and macOS運行,如果是window是.\elasticsearch.bat 命令
cd elasticsearch-7.7.1/bin
./elasticsearch 

按回車鍵後運行時會出現如下內容,我們由此可以看見我們默認運行的端口號爲9200:
[2020-06-17T18:15:19,148][INFO ][o.e.h.AbstractHttpServerTransport] [summerdeMacBook-Pro.local] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}

這裏我們通過curl或者瀏覽器訪問測試是否運行成功;

summerdeMacBook-Pro:~ summer$ curl http://127.0.0.1:9200
{
  "name" : "summerdeMacBook-Pro.local",
  "cluster_name" : "elasticsearch_summer",
  "cluster_uuid" : "91Rh9-woQ_yKMWnmNKLGrA",
  "version" : {
    "number" : "7.7.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "ad56dce891c901a492bb1ee393f12dfff473a423",
    "build_date" : "2020-05-28T16:30:01.040088Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
summerdeMacBook-Pro:~ summer$ curl http://127.0.0.1:9200/_cat/health?v #檢查ES當前運行狀態
  • 啓動另外兩個Elasticsearch實例,以便您可以看到典型的多節點集羣的行爲。您需要爲每個節點指定唯一的數據和日誌路徑。
./elasticsearch -Epath.data=data2 -Epath.logs=log2
./elasticsearch -Epath.data=data3 -Epath.logs=log3

常見的CURD命令操作
爲了測試方便,我們還需要安裝一個 Kibana工具,方便可視化操作;Kibana的安裝也很簡單,下載解壓運行即可;

  1. 下載Kibana for Mac版本
    https://artifacts.elastic.co/downloads/kibana/kibana-7.7.1-darwin-x86_64.tar.gz
    其他版本鏈接如下:
    window版本:https://artifacts.elastic.co/downloads/kibana/kibana-7.7.1-windows-x86_64.zip
    Linux版本:https://artifacts.elastic.co/downloads/kibana/kibana-7.7.1-linux-x86_64.tar.gz
  2. 解壓運行bin/kibana即可,我們可以看到運行起來的端口號爲5601
  log   [11:13:37.475] [info][listening] Server running at http://localhost:5601
  log   [11:13:37.993] [info][server][Kibana][http] http server running at http://localhost:5601
  1. 訪問 http://localhost:5601就進入一個可視化界面操作,功能很多很強大,但我們熟悉ElasticSearch基本操作,用Dev Tools即可,如圖所示,可以輸入我們需要了解的命令:
    kibana操作界面

創建文檔:

PUT /customer/user/1 
{
  "name": "summer"
}
或 
PUT /customer/_doc/1
{
  "name": "summer"
}

查看文檔

GET /customer/user/1 或 GET /customer/_doc/1

修改文檔

POST /customer/user/1 或 /customer/_doc/1
{
"name": "summer for update"
}
或
POST /customer/_doc/1
{
"name": "summer for update"
}

刪除文檔

DELETE /customer/user/1 或 DELETE /customer/_doc/1

注意以上操作都可以執行成功,但在最新版本中有警告
#! Deprecation: [types removal] Specifying types in document index requests is deprecated, use the typeless endpoints instead (/{index}/_doc/{id}, /{index}/_doc, or /{index}/_create/{id}).

意思是不推薦使用:[類型刪除]不推薦在文檔索引請求中指定類型,建議使用以下方式改用/{index}/_doc/{id}訪問,更多功能介紹期待下一篇,下次見!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章