Elasticsearch-基礎(chǔ)使用

零、本文綱要

一葫哗、認(rèn)識(shí)Elasticsearch
二缔刹、倒排索引
三、ES的部分概念
四劣针、安裝ES校镐、Kibana、分詞器
五捺典、索引庫操作
六鸟廓、文檔操作

tips:Ctrl + F 搜索所需內(nèi)容快速閱讀吧。

一、認(rèn)識(shí)Elasticsearch

Elasticsearch:官方分布式搜索和分析引擎 | Elastic

  • 1引谜、Lucene

Lucene是Apache的開源搜索引擎類庫牍陌,提供了搜索引擎的核心API,Elasticsearch底層是基于Lucene來實(shí)現(xiàn)的员咽。

  • 2毒涧、Elasticsearch

Elasticsearch是一個(gè)開源的分布式搜索引擎,可以用來實(shí)現(xiàn)搜索贝室、日志統(tǒng)計(jì)契讲、分析系統(tǒng)監(jiān)控等功能档玻。

  • 3怀泊、Elastic Stack

Elastic Stack是以Elasticsearch為核心的技術(shù)棧,包括Beats误趴、Logstash、Kibana务傲、Elasticsearch凉当。

二、倒排索引

  • 1售葡、倒排索引

倒排索引的概念是基于MySQL這樣的正向索引而言的看杭。

① 正向索引
select * from tb_goods where title like %華為%,過程如下:

  • Ⅰ 搜索數(shù)據(jù)挟伙,條件是title符合%華為%楼雹;
  • Ⅱ 逐行獲取數(shù)據(jù),如id為1的數(shù)據(jù)尖阔;
  • Ⅲ 判斷數(shù)據(jù)中title是否符合條件贮缅;
  • Ⅳ 符合條件放入結(jié)果集,反之丟棄介却;
  • Ⅴ 重復(fù)過程Ⅰ - Ⅳ直至逐行搜索結(jié)束谴供。
正向索引.png

② 倒排索引
兩個(gè)重要概念:
文檔:用來搜索的數(shù)據(jù),其中的每一條數(shù)據(jù)就是一個(gè)文檔齿坷,相當(dāng)于MySQL中row桂肌。
詞條:對(duì)文檔數(shù)據(jù)或用戶搜索數(shù)據(jù),利用某種算法分詞永淌,得到的具備含義的詞語就是詞條崎场,例如:華為手機(jī),拆分為華為遂蛀、手機(jī)谭跨。

創(chuàng)建倒排索引:

  • Ⅰ 將每一個(gè)文檔的數(shù)據(jù)利用分詞算法分詞,得到一個(gè)個(gè)詞條;
  • Ⅱ 創(chuàng)建表饺蚊,每行數(shù)據(jù)包括詞條萍诱、詞條所在文檔id、位置等信息污呼;
  • Ⅲ 根據(jù)詞條唯一性裕坊,可以給詞條創(chuàng)建索引,例如hash表結(jié)構(gòu)索引燕酷。
創(chuàng)建倒排索引.png

不難發(fā)現(xiàn)籍凝,Elasticsearch其實(shí)是以空間換時(shí)間,通過創(chuàng)建倒排索引的方式來提升查詢效率苗缩。
同樣的語句select * from tb_goods where title like %華為%饵蒂,搜索過程如下:

  • Ⅰ 用戶輸入條件華為進(jìn)行搜索;
  • Ⅱ 對(duì)用戶條件進(jìn)行分詞酱讶,得到華為退盯;
  • Ⅲ 按照詞條'華為',到倒排索引中查找泻肯,得到文檔id:1渊迁、2;
  • Ⅳ 根據(jù)id到正向索引中找到具體文檔灶挟。
倒排索引查詢.png

三琉朽、ES的部分概念

  • 1、文檔和字段

Elasticsearch是面向文檔(Document)存儲(chǔ)的稚铣,可以是數(shù)據(jù)庫中的一條商品數(shù)據(jù)箱叁,一個(gè)訂單信息。文檔數(shù)據(jù)會(huì)被序列化為json格式后存儲(chǔ)在Elasticsearch中:

圖中右邊理解為文檔.png

Json文檔中往往包含很多的字段(Field)惕医,類似于數(shù)據(jù)庫中的列耕漱。

  • 2、索引和映射

索引(Index)曹锨,就是相同類型的文檔的集合孤个,如:用戶文檔、商品文檔等沛简∑肜穑可以把索引當(dāng)做是數(shù)據(jù)庫中的
數(shù)據(jù)庫的表會(huì)有約束信息椒楣,用來定義表的結(jié)構(gòu)给郊、字段的名稱、類型等信息捧灰。因此淆九,索引庫中就有映射(mapping)统锤,是索引中文檔的字段約束信息,類似表的結(jié)構(gòu)約束炭庙。

約束-映射.png
  • 3饲窿、MySQL和Elasticsearch

MySQL:擅長事務(wù)類型操作,可以確保數(shù)據(jù)的安全和一致性焕蹄;
Elasticsearch:擅長海量數(shù)據(jù)的搜索逾雄、分析、計(jì)算腻脏。
所以鸦泳,實(shí)際使用時(shí)可以將對(duì)安全性要求較高的寫操作,使用MySQL實(shí)現(xiàn)永品,對(duì)查詢性能要求較高的搜索需求做鹰,使用Elasticsearch實(shí)現(xiàn)

image.png

四鼎姐、安裝ES钾麸、Kibana、分詞器

  • 1症见、創(chuàng)建網(wǎng)絡(luò)

創(chuàng)建網(wǎng)絡(luò)喂走,用于容器間互聯(lián)。

docker network create es-net
  • 2谋作、加載鏡像

此處需要注意,elasticsearch:8.1.0kibana:8.1.0兩個(gè)版本要一致乎芳。

docker pull elasticsearch:8.1.0
docker pull kibana:8.1.0
  • 3遵蚜、部署運(yùn)行ES
docker run -d \
--name es \
--net es-net \
-p 9200:9200 \
-p 9300:9300 \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \ # 非集群模式
-v es-data:/usr/share/elasticsearch/data \ # 掛載邏輯卷,綁定es的數(shù)據(jù)目錄
-v es-plugins:/usr/share/elasticsearch/plugins \ # 掛載邏輯卷奈惑,綁定es的插件目錄
--privileged \ # 授予邏輯卷訪問權(quán)
elasticsearch:8.1.0
  • 4吭净、部署運(yùn)行Kibana
docker run -d \
--name kibana \
--net es-net \ # 與Elasticsearch加入同一個(gè)網(wǎng)絡(luò)
-e ELASTICSEARCH_HOSTS=http://es:9200 \ # 設(shè)置Elasticsearch的地址,Kibana可以用容器名直接訪問Elasticsearch
-p 5601:5601 \
kibana:8.1.0

官方簡單部署供參考肴甸,具體命令如下:

docker network create elastic
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.1.0
docker run --name es-node01 --net elastic -p 9200:9200 -p 9300:9300 -t docker.elastic.co/elasticsearch/elasticsearch:8.1.0

docker pull docker.elastic.co/kibana/kibana:8.1.0
docker run --name kib-01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.1.0
  • 5寂殉、訪問ES、Kibana
  • ES:http://192.168.253.128:9200/
ES.png
  • Kibana:http://192.168.253.128:5601/
Kibana.png
  • 6原在、安裝分詞器

① 查看數(shù)據(jù)卷目錄

docker volume inspect es-plugins

[
    {
        "CreatedAt": "2022-03-10T10:28:21+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
        "Name": "es-plugins",
        "Options": null,
        "Scope": "local"
    }
]

② 將分詞器文件放到ES容器的插件數(shù)據(jù)卷中
插件數(shù)據(jù)卷目錄:/var/lib/docker/volumes/es-plugins/_data
下載分詞器:IK分詞器GitHub地址:https://github.com/medcl/elasticsearch-analysis-ik

③ 重啟ES容器使其生效

docker restart es
  • 7友扰、使用分詞器

打開Kibana控制臺(tái),具體操作如下:

Kibana控制臺(tái).png

選擇分詞器算法Analyzer: ik_smart, ik_max_word庶柿,測試使用分詞器:

GET /_analyze
{
  "analyzer": "ik_smart",
  "text": "測試使用分詞器村怪。"
}
分詞器使用.png

更新 IK 分詞:擴(kuò)展字典&擴(kuò)展停止詞字典(不為其創(chuàng)建詞條的詞,如:的浮庐、啊等甚负。)
分詞器配置文件目錄:/var/lib/docker/volumes/es-plugins/_data/ik/config

更新IK分詞.png

更新配置后,重啟服務(wù)即可生效梭域。命令如下:

# 重啟服務(wù)
docker restart elasticsearch
docker restart kibana

五斑举、索引庫操作

  • 1、mapping映射屬性
  • type:字段數(shù)據(jù)類型病涨,常見的簡單類型有:
    • 字符串:text(可分詞的文本)富玷、keyword(精確值,例如:品牌没宾、國家凌彬、ip地址)
    • 數(shù)值:long、integer循衰、short铲敛、byte、double会钝、float伐蒋、
    • 布爾:boolean
    • 日期:date
    • 對(duì)象:object
  • index:是否創(chuàng)建索引,默認(rèn)為true
  • analyzer:使用哪種分詞器
  • properties:該字段的子字段
  • 2迁酸、索引庫CRUD

索引庫操作的官方文檔:Index APIs | Elasticsearch Guide [7.12] | Elastic先鱼。

  • 創(chuàng)建索引庫和映射
    PUT /<index>
PUT /test
{
  "mappings": {
    "properties": {
      "field1": { "type": "text" }
    }
  }
}

比如,創(chuàng)建以上先前案例的索引(ES索引:類似數(shù)據(jù)庫中表的概念)奸鬓。

PUT /tb_mobile
{
  "mappings": {
    "properties": {
      "id":{
        "type": "integer" 
      },
      "title":{
        "type": "text", # 可分詞的文本字符串類型
        "analyzer": "ik_max_word" # 分詞算法
      },
      "price":{
        "type": "double"
      }
    }
  }
}
  • 查詢索引庫
    GET /<target>
GET /tb_mobile
  • 修改索引庫
    PUT /<target>/_mapping焙畔,注意原則上不允許修改已存在的索引庫的映射,但是可以新增串远。
image.png
PUT /tb_mobile/_mapping
{
  "properties": {
    "note": {
      "type": "keyword"
    }
  }
}
  • 刪除索引庫
    DELETE /<index>
DELETE /tb_mobile

六宏多、文檔操作

文檔操作的官方文檔:Document APIs | Elasticsearch Guide [7.12] | Elastic

  • 新增文檔
    POST /<target>/_doc/<_id>:新增文檔,已存在則覆蓋(可理解為更新)澡罚;
    POST /<target>/_create/<_id>:新增文檔伸但,已存在則報(bào)錯(cuò),"version_conflict_engine_exception"留搔。
POST /tb_mobile/_doc/1
{
  "id": 1,
  "title": "華為手機(jī)",
  "price": "5499"
}
  • 查詢文檔
    GET <index>/_doc/<_id>:查詢完整文檔更胖,包含版本、序列號(hào)等隔显;
    GET <index>/_source/<_id>:查詢文檔JSON存儲(chǔ)的內(nèi)容却妨。
GET /tb_mobile/_doc/1
GET /tb_mobile/_source/1
圖左_doc右_source.png
  • 刪除文檔
    DELETE /<index>/_doc/<_id>
DELETE /tb_mobile/_doc/3
  • 修改文檔
    POST /<target>/_doc/<_id>:新增文檔,已存在則覆蓋(可理解為更新)荣月;
    POST /<index>/_update/<_id>:局部更新管呵,僅更新指定部分。
POST /tb_mobile/_doc/3
{
  "id": 3,
  "title": "小米手機(jī)",
  "price": 4999
}

POST /tb_mobile/_update/3
{
  "doc": {
    "price": 4499
  }
}

七哺窄、結(jié)尾

以上即為Elasticsearch-基礎(chǔ)使用的全部內(nèi)容捐下,感謝閱讀账锹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市坷襟,隨后出現(xiàn)的幾起案子奸柬,更是在濱河造成了極大的恐慌,老刑警劉巖婴程,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廓奕,死亡現(xiàn)場離奇詭異,居然都是意外死亡档叔,警方通過查閱死者的電腦和手機(jī)桌粉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衙四,“玉大人铃肯,你說我怎么就攤上這事〈福” “怎么了押逼?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惦界。 經(jīng)常有香客問我挑格,道長,這世上最難降的妖魔是什么沾歪? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任漂彤,我火速辦了婚禮,結(jié)果婚禮上灾搏,老公的妹妹穿的比我還像新娘显歧。我一直安慰自己,他們只是感情好确镊,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著范删,像睡著了一般蕾域。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上到旦,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天旨巷,我揣著相機(jī)與錄音,去河邊找鬼添忘。 笑死采呐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搁骑。 我是一名探鬼主播斧吐,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼又固,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了煤率?” 一聲冷哼從身側(cè)響起仰冠,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蝶糯,沒想到半個(gè)月后洋只,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昼捍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年识虚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妒茬。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡担锤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出郊闯,到底是詐尸還是另有隱情妻献,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布团赁,位于F島的核電站育拨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏欢摄。R本人自食惡果不足惜熬丧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怀挠。 院中可真熱鬧析蝴,春花似錦、人聲如沸绿淋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吞滞。三九已至佑菩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間裁赠,已是汗流浹背殿漠。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佩捞,地道東北人筒狠。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓卫病,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扣墩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容