ElasticSearch7.10.0入門學習


ElasticSearch完成最關鍵的一個功能就是 大數據搜索

官網:https://www.elastic.co/cn/elasticsearch/

簡介

Elasticsearch 是一個分布式全文檢索引擎

Lucene、Solr、ElasticSearch

  • Lucene
    • 是一套信息搜索工具jar包
    • 包括了:索引結構、讀寫索引的工具、排序、搜索規則等等工具類
    • 注意:不包括搜索引擎系統
  • Solr
    • 是基於Lucene做了一些封裝和增強
    • 通過對外提供Web-service的API接口
  • ElasticSearch
    • 是基於Lucene做了一些封裝和增強
    • 通過簡單的Restful來隱藏Lucene的復雜性

安裝

windows安裝es

環境:jdk1.8及以上

官網中可以進行下載,但是因為是外網,速度是極其的慢。而且可能安裝失敗,所以我們可以通過官網找到你要下載的版本,然后通過華為雲鏡像去下載。(下方鏈接)

ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D

在windows上安裝es,很方便解壓即可使用

解壓的目錄結構如下

image-20210225231947251

bin 啟動文件
config 配置文件
	log4j 日志配置文件
	jvm.options java虛擬機相關配置
	elasticsearch.yml es配置文件 默認:9200端口
lib 相關jar包
log 日志
modules 功能模塊
plugins 插件 比如ik分詞器

啟動

雙擊bin\elasticsearch.bat

image-20210225232716908

在網頁中就可以訪問 http://localhost:9200/

image-20210225232757104

安裝可視化界面 elasticsearch-head

除了下面的安裝方法,你也可以在谷歌瀏覽器中安裝插件elasticsearch head

環境:nodejs

下載地址:https://github.com/mobz/elasticsearch-head

下載完成后,盡量將ElasticSearch相關工具放在統一目錄下

cd elasticsearch-head #到路徑下
npm install -g nrm #全局安裝nrm 如果沒有安裝過安裝一下
nrm use taobao #切換鏡像
npm install #安裝依賴 
npm run start #啟動項目

啟動

在網頁中就可以訪問 http://localhost:9200/

但是,出現了跨域問題

image-20210225233754829

elasticsearch.yml文件中配置,解決跨域。注意由於yml的格式問題,冒號后面需要加空格。

修改好配置文件之后重新啟動elasticsearch

http.cors.enabled: true
http.cors.allow-origin: "*"

image-20210225234338816

安裝kibana

kibana可以將elasticsearch的數據通過友好的界面展示出來,提供實時的分析功能。

官網下載慢,和elasticsearch一樣的解決方法,華為雲鏡像:https://mirrors.huaweicloud.com/kibana/?C=N&O=D

注意:需要保證版本和elasticsearch的版本一致

下載完成后,盡量將ElasticSearch相關工具放在統一目錄下

啟動

雙擊bin目錄下的kibana.bat

訪問 http://localhost:5601

如果說,你在英文方面不太擅長,kibana是支持漢化的

編輯器打開kibana解壓目錄/config/kibana.yml,添加如下,然后沖洗kibana

i18n.locale: "zh-CN"

直接修改配置就可以實現漢化的原因是在kibana-7.10.0-windows-x86_64\x-pack\plugins\translations\translations中存在了zh-CN.json

ES核心概念

elasticsearch是面向文檔。一切都是json。

傳統的關系型數據庫和elasticsearch進行對比

DB ElasticSearch
數據庫 database 索引 indices
表 tables types
行 rows 文檔 documents
字段 columns fields

elasticsearch中可以包含多個索引(數據庫),每個索引中可以包含多個類型(表),每個類型下又包含多個文檔(行),每個文檔中又包含多個字段(列)。

IK分詞器

分詞:即把一段中文或者別的划分成一個個的關鍵字,默認的中文分詞是將每個字看成一個詞不使用用IK分詞器的情況下)。但是,這顯然是不符合要求的,所以我們需要安裝中文分詞器ik來解決這個問題。

IK提供了兩個分詞算法: ik_smartik_max_word ,其中ik_smart最少切分, ik_max_word最細粒度划分!

下載

版本要與ElasticSearch版本對應

下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

安裝

加壓即可(但是我們需要解壓到ElasticSearch的plugins目錄下),然后壓縮包進行刪除

重啟elasticsearch,可以看到加載了插件

image-20210226085341384

測試

使用kibana的開發工具進行測試,注意:kibana開發工具執行的時候,需要將鼠標選中當前行,然后點擊運行

image-20210226082736603

image-20210226082826199

從上面的例子中,感覺分詞都比較正常,但是大多數,分詞都滿足不了我們的想法,如下例

image-20210226083319292

那么,我們需要手動將該詞添加到分詞器的詞典當中

添加自定義的詞添加到擴展字典中

elasticsearch目錄/plugins/elasticsearch-analysis-ik-7.10.0/config/IKAnalyzer.cfg.xml

我們會看到下面的內容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 擴展配置</comment>
	<!--用戶可以在這里配置自己的擴展字典 -->
	<entry key="ext_dict"></entry>
	 <!--用戶可以在這里配置自己的擴展停止詞字典-->
	<entry key="ext_stopwords"></entry>
	<!--用戶可以在這里配置遠程擴展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用戶可以在這里配置遠程擴展停止詞字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

將擴展字典進行修改,然后在和IKAnalyzer.cfg.xml的相同目錄下,新建一個my.dic,添加字典

<!--用戶可以在這里配置自己的擴展字典 -->
<entry key="ext_dict">my.dic</entry>

image-20210226090109040

重啟ElasticSearch,再次使用kibana測試

可以看到加載了my.dic

image-20210226085252542

image-20210226090007920

Rest風格

基本Rest命令說明

method url地址 描述
PUT(創建,修改) localhost:9200/索引名稱/類型名稱/文檔id 創建文檔(指定文檔id)
POST(創建) localhost:9200/索引名稱/類型名稱 創建文檔(隨機文檔id)
POST(修改) localhost:9200/索引名稱/類型名稱/文檔id/_update 修改文檔
DELETE(刪除) localhost:9200/索引名稱/類型名稱/文檔id 刪除文檔
GET(查詢) localhost:9200/索引名稱/類型名稱/文檔id 查詢文檔通過文檔ID
POST(查詢) localhost:9200/索引名稱/類型名稱/文檔id/_search 查詢所有數據

基本操作

1、創建一個索引,添加

PUT /test1/type1/1
{
  "name":"DJ同學",
  "age":22
}

image-20210226090816239

image-20210226091231734

2、字段數據類型

  • 字符串類型:text、keyword
  • 數值型:long、Integer、short、byte、double、float、half floatscaled float
  • 日期類型:date
  • 布爾類型:boolean
  • 二進制類型:binary
  • ...

3、指定字段的類型(使用PUT)

類似於建庫(建立索引和字段對應類型),也可看做規則的建立

PUT /test2
{
  "mappings":{
    "properties":{
      "name":{
        "type":"text"
      },
      "age":{
        "type":"long"
      },
      "birthday":{
        "type":"date"
      }
    }
  }
  
}

image-20210226091850258

4、獲取3建立的規則

GET test2

5、獲取默認信息

_doc 默認類型(default type),type 在未來的版本中會逐漸棄用,因此產生一個默認類型進行代替

PUT /test3/_doc/1
{
  "name":"DJ同學",
  "age":22,
  "birthday":"2021-01-01"
}

GET test3

image-20210226092804335

image-20210226093818177

7、刪除

刪除索引 DELETE /索引名/~類型名~/文檔id 根據需求來判斷是刪除索引還是刪除文檔記錄!

DELETE test1

8、新增數據

PUT /test4/user/1
{
  "name":"張三",
  "grade":"大一"
}

9、修改數據

你可以使用put的創建命令,直接覆蓋。下面提供了最新的修改方法

POST /test4/user/3/_update
{
  "doc":{
    "name":"趙四"
  }
}

10、簡單查詢數據

GET /test4/user/2

GET /test4/user/_search?q=name:"張三"

11、復雜的查詢select(排序,分頁,高亮,模糊查詢,精准查詢)

test4索引中的內容如下

image-20210226110154487

查詢匹配

  • sort 只能用於數字類型,而且所有的score會變成null
  • _source 過濾字段,默認顯示所有字段
GET /test4/user/_search
{
  "query":{
    "match": {
      "name":"三三"
    } 
  }
  ,"_source": ["name","desc"]
  ,"sort":[
    {
      "age":{
        "order":"asc"  
      }
    }]
    ,"from": 0
    ,"size": 1
}

image-20210226111021827

多條件查詢(bool)

  • must 相當於 and
  • should 相當於 or
  • must_not 相當於 not (... and ...)
  • filter 過濾
GET /test4/user/_search
{
  "query":{
    "bool":{
      "must":[
          {
            "match":{
              "name":"三"  
            }
          }
          ,
          {
            "match":{
              "age":9  
            }
          }
        ]
    }
  }
}

GET /test4/user/_search
{
  "query":{
    "bool":{
      "must":[
          {
            "match":{
              "name":"三"  
            }
          }
        ]
        ,"filter":{
          "range": {
            "age": {
              "gte": 0,
              "lte": 20
            }
          }
        }
    }
  }
}

精確查詢

  • term 直接通過 倒排索引 指定詞條查詢
  • 適合查詢 number、date、keyword ,不適合text
GET /test4/user/_search
{
	"query": {
	  "term": {
	    "name":"張三"
	  }
	}
}

高亮查詢

GET test4/user/_search
{
  "query": {
    "match": {
      "name":"張三"
    }
  }
  ,
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}
// 自定義前綴和后綴
GET test4/user/_search
{
  "query": {
    "match": {
      "name":"張三"
    }
  }
  ,
  "highlight": {
    "pre_tags": "<p class='key' style='color:red'>",
    "post_tags": "</p>", 
    "fields": {
      "name": {}
    }
  }
}

集成springboot

Java High Level REST Client 高級客戶端api測試

官網學習api:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.x/java-rest-high.html

包括了索引和文檔的CRUD,代碼es-api https://gitee.com/dz138598/elasticsearch-study/tree/master/

實戰

代碼:https://gitee.com/dz138598/elasticsearch-study/tree/master/jd-project

image-20210226225843737


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM