ElasticSearch快速入門-1

文章目錄

  • Elasticsearch簡介
  • ES概念
    • ES和關系型數據庫的對比
    • 正序索引和倒序索引
    • 安裝es、kibana、IK分詞器
  • ES操作
    • _cat操作
    • Mapping映射屬性
    • 索引庫操作
      • 索引庫CRUD
      • 文檔CRUD
      • 文檔批處理操作
  • Java客戶端操作ES

Elasticsearch簡介

就是一個搜索引擎數據庫
在這里插入圖片描述以下都簡稱ES

ES概念

ES和關系型數據庫的對比

ES是面向文檔的!文檔數據都會序列化為JSON格式存儲,所以一切都是Json ,ES(集群)中可以包含多個索引(數據庫),每個索引中可以包含多個類型(表)(類型es8后被棄用,一個索引下存儲單一類型數據),每個類型/索引下又包含多個文檔(行),每個文檔中又包含多個字段(列)
在這里插入圖片描述
SQL是操作SQL數據庫的語法,DSL是操作ES數據庫的語法

概念/功能Elasticsearch (ES)MySQL核心差異說明
數據組織層級
索引Index(最高層級邏輯數據容器)DatabaseES的Index類似于MySQL的Database,都是頂層數據容器
類型Type(已廢棄)TableES的類型概念已淘汰,現在每個索引存儲單一類型數據
文檔Document(JSON格式基本數據單元)Row文檔是半結構化JSON,行是結構化記錄
字段Field(JSON鍵值對)ColumnES字段動態靈活,MySQL列需預定義
數據定義
結構定義Mapping(定義字段類型和屬性)SchemaES映射支持動態添加字段,MySQL需預定義結構
唯一標識_id(文檔唯一標識)Primary Key功能相似,都是數據唯一標識符
數據操作
查詢語言Query DSL(JSON格式)
SQL Over ES(有限支持)
SQLES主要使用專用JSON查詢,MySQL使用標準SQL
寫入/更新Index API(寫入)
Update API(部分更新)
INSERT/UPDATE/DELETEES寫入稱為"索引",支持腳本更新
系統特性
事務支持? 不支持ACID事務? 支持ACID事務MySQL適合銀行交易等場景,ES不適合
數據一致性?? 最終一致性(近實時NRT)? 強一致性ES寫入后約1秒可查,MySQL立即可見
存儲引擎Apache Lucene(倒排索引+Doc Values)InnoDB(B+樹索引)Lucene優化全文搜索,InnoDB優化事務處理
索引機制🔄 自動索引所有字段
倒排索引(文本)
Doc Values(聚合)
?? 需顯式創建索引
B+樹索引(主鍵/普通)
FULLTEXT(全文)
ES默認索引所有字段,MySQL需手動創建
擴展性? 原生分布式
自動分片(Shard)
副本(Replica)
🧩 需分庫分表
主從復制
ES天生分布式易擴展,MySQL水平擴展復雜
主要用途🔍 全文搜索
📊 日志/指標分析
🌐 地理空間分析
💳 事務處理(OLTP)
🧾 關系數據管理
📈 報表查詢(OLAP)
ES擅長搜索分析非結構化數據,MySQL擅長事務管理結構化數據
最佳實踐
適用場景搜索引擎、日志分析、實時監控電商交易、用戶管理、財務系統常組合使用:MySQL作主數據源,ES提供搜索分析
數據模型無模式(Schema-less)
JSON文檔
嚴格模式(Schema-on-Write)
行列結構
ES靈活適合變化數據,MySQL嚴謹保證數據完整性
兩者的不同
在這里插入圖片描述

正序索引和倒序索引

正序索引就是關系型數據庫用的,但是這種使用%小米%這種模糊搜索的時候會導致正向索引失效,然后一個一個去比對,會非常浪費時間(當數據量非常大的時候)
在這里插入圖片描述
倒序索引就是你在插入文檔的時候,將拿到詞分成幾個詞條(比如小米手機會分成小米和手機),并且記錄相應的文檔id,之后分詞還有相同的會記錄到一個詞條中
在這里插入圖片描述
然后我們搜索的時候,比如搜索華為手機
在這里插入圖片描述

安裝es、kibana、IK分詞器

es是數據庫,kibana可以理解為navicat是看es中數據的
這里不做講解哈
可以看一下其他的文章

ES操作

對于ES的所有操作ES都封裝成立restfulapi用http請求調用
和我們的mysql需要用connection一樣

_cat操作

直接
http://es所在IP:es啟動端口號/_cat/master
在這里插入圖片描述

Mapping映射屬性


其實還有一個type類型為:nested 可以防止檢索錯誤
每一個字段都有上面對應的屬性
比如下面這個

{
"age": 21,
"weight": 52.1,
"isMarried":false,
"info":"黑馬程序員Java講師",
"email":"zy@itcast.cn",
"score":[99.199.598.9],
"name":
{"firstName":"云",
"lastName":"趙"}
}

age字段type對應數值唄,byte就夠用,index有無看需求(是否參與搜索或者排序),21肯定是不需要分詞器的,無子字段所以肯定沒有properties
info字段對應text,因為可以分詞,index肯定是要的,分詞器需要自己指定,無子字段
name是有子字段的(嵌套object對象),所有有properties,里面每一個值又單獨有自己的mapping
firstname肯定還是keyword不需要分詞
這個score的type是floates中,所有數組類型我們都不用管,只需要看里面元素的類型

索引庫操作

ES都是基于Restful的接口,先介紹一下Restful
在這里插入圖片描述

索引庫CRUD

下面對應索引庫的文檔的CRUD操作我都將在kibana的開發工具中發送http請求(有提示),且不用帶上我們的es ip+端口,因為kibana是和es本身就綁定的
如圖
在這里插入圖片描述
創建索引命令
里面設置對應的mapping
新增索引庫 注:這里新增是PUT請求

PUT /heima
{"mappings": {"properties": {"info":{"type": "text","analyzer": "standard","index": true},"age":{"type": "byte","index": true},"email":{"type": "keyword","index": false},"name":{"type": "object", "properties": {"firstName":{"type": "keyword"},"lastName":{"type": "keyword"}}}}}
}

查詢索引庫

GET /xiaoyuan
xiaoyuan為索引庫名

刪除索引庫

DELETE /xiaoyaun
xiaoyuan為索引庫名

ES索引庫不支持修改,不可以對已有數據段修改,但是可以添加新字段
如圖
在這里插入圖片描述

文檔CRUD

新增文檔

POST /索引庫/_doc/文檔ID(不寫自動生成)
{json數據-應對應索引庫結構}
添加文檔(指定ID1為指定的ID
POST /products/_doc/1
{"name": "Wireless Headphones","price": 129.99,"description": "Noise-cancelling Bluetooth headphones","stock": 50,"created_at": "2023-10-25T08:30:00Z"
}添加文檔(自動生成IDPOST /products/_doc
{"name": "Smart Watch","price": 299.99,"description": "Water-resistant fitness tracker","stock": 25,"created_at": "2023-10-26T10:15:00Z"
}響應示例(自動ID{"_index": "products","_id": "abc123xyz",(返回的文檔id)"_version": 1,"result": "created"
}

讀取文檔

GET /products/_doc/文檔ID
獲取單個文檔
GET /products/_doc/1響應示例
{"_index": "products","_id": "1","_version": 1,"_source": {"name": "Wireless Headphones","price": 129.99,"description": "Noise-cancelling Bluetooth headphones","stock": 50,"created_at": "2023-10-25T08:30:00Z"}
}
搜索文檔
GET /products/_search
{"query": {"match": {"description": "bluetooth"}}
}

刪除文檔

DELETE /索引庫名/_doc/文檔ID
# 刪除單個文檔
DELETE /products/_doc/1# 響應示例
{"_index": "products","_id": "1","_version": 2,"result": "deleted"
}# 按查詢刪除(刪除所有庫存為0的商品)
POST /products/_delete_by_query
{"query": {"term": {"stock": 0}}
}

更新文檔(分兩種)
1.全量修改
2.增量修改

全量修改
相當于是先刪除原文檔再添加新文檔
語法

PUT /索引庫名/_doc/文檔ID
{ 數據 }

實例

替換整個文檔(覆蓋操作)
PUT /products/_doc/1
{"name": "Premium Headphones","price": 149.99,"description": "Deluxe noise-cancelling model","stock": 40,"created_at": "2023-10-25T08:30:00Z"
}

增量修改
語法

POST /索引庫名/_update/文檔id
{
"doc" {"字段名""新的值",...}
}

實例

部分更新(增加庫存)
POST /products/_update/1
{"doc": {"stock": 60}
}

文檔批處理操作

一次請求包含多個文檔操作
在這里插入圖片描述
解釋如下

POST /_bulk 作為請求路徑
"index"索引,動詞索引就是插入數據唄(或者全量改動)
索引一個文檔,后面接著一條數據,需要指定_index-索引庫和_Id文檔id(不寫默認生成)
"index""create"相似,但是"create"是只可以創建,不能覆蓋
而"index"既可以創建新的,也可以覆蓋原來的文檔
"update"是增量改動,跟著一行"doc"攜帶修改字段
"delete"刪除指定索引庫和文檔ID即可

案例

POST /_bulk
{ "index" : { "_index" : "products", "_id" : "101" } }
{ "name": "USB-C Cable", "price": 15.99, "stock": 200 }
{ "create" : { "_index" : "products", "_id" : "102" } }
{ "name": "Phone Charger", "price": 29.99, "stock": 150 }
{ "update" : {"_id" : "101", "_index" : "products"} }
{ "doc" : {"stock": 180} }
{ "delete" : { "_index" : "products", "_id" : "100" } }

Java客戶端操作ES

對應的可以操作ES的API有很多種(其實可以發http請求的的可以操作不過要自己封裝很麻煩)
我們用Elasticsearch-Rest-Client這個官方提供的
比如我們操作redis就用Spring Data Redis這個依賴一樣的(或者redisson)
這里的話暫時不做講解,因為gulimall對應的操作api好像已經過期了,es8后又需要其他api了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913496.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913496.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913496.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【論文撰寫】如何把AI生成的文本公式復制在word中,完整的復制公式,拷貝豆包生成的公式

1、問題描述 AI生成的內容 在對于含有公式的生成內容,直接拷貝到Word 會呈現類Markdown的格式,除了格式上,公式也不是標準格式。 如下列兩個圖片對比 2、工具 這時,就需要用另一個工具進行轉換 Home - Snip Web Mathpix Acc…

【機器學習筆記 Ⅱ】5 矩陣乘法

矩陣乘法是神經網絡、圖形學、科學計算等領域的核心運算,用于高效處理線性變換和批量數據計算。以下是其數學定義、計算規則及實際應用的系統解析。1. 數學定義2. 計算步驟(示例)3. 代碼實現 (1) Python(NumPy) import…

【數字后端】- 衡量design的congestion情況

基礎概念 通常在RP的placement之后,就要去去查看設計的Density和Congestion情況。 而congestion的衡量指標有以下兩點: (1)Overflow Congestion 分析基于一個基本『單元』稱為GCELL: Routing Grid cell. Gcell 是工具自己定義…

Oracle面試題-體系結構

📌1.如何查看 Oracle 數據庫的版本信息? 1. 標準 SQL 查詢(推薦) 方法 1:查詢 v$version 視圖(最常用) SELECT * FROM v$version;輸出示例: BANNER -------------------------------…

Flex布局原理

1.布局原理 flex 是 flexible Box 的縮寫,意為"彈性布局",用來為盒狀模型提供最大的靈活性,任何一個容器都可以 指定為 flex 布局。 當我們為父盒子設為 flex 布局以后,子元素的 float、clear 和 vertical-align 屬性將…

JavaScript 模塊系統二十年:混亂、分裂與出路

JavaScript 模塊系統:一場至今未醒的歷史夢魘 一、引言:我們真的解決了“模塊化”嗎? 你可能以為,JavaScript 模塊系統早已標準化,import/export 就是答案。 但現實卻是另一番景象:構建報錯、依賴沖突、加…

人工智能-基礎篇-23-智能體Agent到底是什么?怎么理解?(智能體=看+想+做)

1、智能體是什么? 想象你有一個超級聰明的小助手,它能: 自己看環境(比如看到天氣、聽到聲音、讀到數據);自己做決定(比如下雨了要關窗,電量低要去充電);自己…

Java實現項目1——彈射球游戲

項目:彈射球游戲 項目描述: 類似于乒乓球的游戲,游戲可以播放背景音樂,可以更換背景圖,當小球碰到下面的擋板后會反彈,當小球碰到方塊后會增加分數,當小球掉落會導致游戲失敗,按下…

(十八)深入了解 AVFoundation-編輯:添加背景音樂與音量控制(下)——實戰篇

一、功能目標回顧在理論篇中,我們系統地介紹了如何使用 AVFoundation 添加背景音樂音軌,并通過 AVMutableAudioMix 與 AVMutableAudioMixInputParameters 實現多音軌混音與音量控制。我們了解了諸如淡入淡出、靜音控制、動態音量曲線等核心技術細節。本篇…

如何在新機器上設置github完成內容git push

如果你在一臺新的機器上git pull 倉庫,完成修改,然后git push,會發現下面錯誤: Username for https://github.com: xiaomaolv Password for https://xiaomaolvgithub.com: remote: Support for password authentication was rem…

Rust 注釋

Rust 注釋 引言 Rust 編程語言以其內存安全、并發支持和高性能等特點在軟件開發領域獲得了廣泛的關注。在Rust編程中,注釋是一種非常重要的元素,它不僅可以幫助程序員理解代碼,還可以提高代碼的可維護性和可讀性。本文將詳細介紹Rust中的注釋…

Flink Oracle CDC 環境配置與驗證

一、Oracle 數據庫核心配置詳解 1. 啟用歸檔日志(Archiving Log) Oracle CDC 依賴歸檔日志獲取增量變更數據,需按以下步驟啟用: 非CDB數據庫配置: -- 以DBA身份連接數據庫 CONNECT sys/password AS SYSDBA; -- …

ssh: Could not resolve hostname d: Temporary failure in name resolution

關于不能本機上傳文件夾到服務器上的一個問題的記錄。 scp -r "D:\***\datasets" usernamexxxxxx:接收文件夾名 一直報錯:ssh: Could not resolve hostname d: Temporary failure in name resolution 反復嘗試發現無果之后想起來,在傳輸的時候…

2025年的前后端一體化CMS框架優選方案

以下是結合技術生態、開發效率和商業落地驗證,整理的2025年前后端一體化CMS框架優選方案:一、?主流成熟框架組合?1. ?React Node.js (Express/Next.js)??前端?:React生態成熟,配合Redux狀態管理,適合復雜后臺界…

《聲音的變形記:Web Audio API的實時特效法則》

用戶期待更豐富、更具沉浸感的聽覺體驗時,基于Web Audio API實現的實時音頻特效,就像是為這片森林注入了靈動的精靈,讓簡單的聲音蛻變為震撼人心的聽覺盛宴。回聲特效帶來空間的深邃回響,變聲效果賦予聲音全新的個性面貌。接下來&…

LLM場景下的強化學習【PPO】

適合本身對強化學習有基本了解 一、什么是強化學習 一句話:在當前狀態(State)下,智能體(Agent)與環境(Environment)交互,并采取動作(Action)進入下一狀態,過程中獲得獎勵(Reward,有正向有負向),從而實現從…

Python爬蟲實戰:研究chardet庫相關技術

1. 引言 1.1 研究背景與意義 在互聯網信息爆炸的時代,網絡數據采集技術已成為信息獲取、數據分析和知識發現的重要手段。Python 作為一種高效的編程語言,憑借其豐富的第三方庫和簡潔的語法,成為爬蟲開發的首選語言之一。然而,在網絡數據采集中,文本編碼的多樣性和不確定…

回溯題解——全排列【LeetCode】

46. 全排列 一、算法邏輯(逐步通順講解每一步思路) 該算法使用了典型的 回溯(backtracking) 狀態數組 思路,逐層遞歸生成排列。 題目目標:給定一個無重復整數數組 nums,返回其所有可能的全排…

RICE模型或KANO模型在具體UI評審時的運用經驗

模型是抽象的產物,結合場景才好說明(數據為非精確實際數據,僅供參考,勿照搬)。 ??案例一:RICE模型解決「支付流程優化」vs「首頁動效升級」優先級爭議?? ??背景??:APP電商模塊在迭代中面臨兩個需求沖突——支付團隊主張優化支付失敗提示(減少用戶流失),設計…

緩存中間件

緩存與分布式鎖 即時性、數據一致要求不高的 訪問量大且更新頻率不高的數據 (讀多,寫少) 常用緩存中間件 redis Spring 如果用spring的情況下,由于redis沒有受spring的管理, 則我們需要自己先寫一個redis的配置類&…