Elasticsearch RESTful API入門:基礎搜索與查詢DSL

Elasticsearch RESTful API入門:基礎搜索與查詢DSL

本文為Elasticsearch初學者詳細解析RESTful API的核心操作與查詢DSL語法,包含大量實戰示例及最佳實踐。

一、Elasticsearch與RESTful API簡介

Elasticsearch(ES)作為分布式搜索分析引擎,其RESTful API是與集群交互的核心方式。通過HTTP協議實現:

  • ? 索引文檔的CRUD操作
  • ? 執行復雜的搜索查詢
  • ? 獲取集群健康狀況
  • ? 管理索引生命周期

核心概念速覽

概念說明類比關系型數據庫
索引(Index)文檔的集合數據庫的表
文檔(Document)JSON格式的基本數據單元表中的一行記錄
分片(Shard)索引的水平分割單元表分區
映射(Mapping)定義文檔字段及類型表結構定義

二、基礎API操作實戰

1. 索引管理

# 創建索引
PUT /products
{"settings": {"number_of_shards": 3,"number_of_replicas": 1},"mappings": {"properties": {"name": {"type": "text"},"price": {"type": "float"},"category": {"type": "keyword"},"created_at": {"type": "date"}}}
}# 刪除索引 (謹慎操作!)
DELETE /products### 2. 文檔操作```bash
# 添加文檔
POST /products/_doc/1001
{"name": "無線藍牙耳機","price": 299.0,"category": "電子產品","created_at": "2023-05-10"
}# 獲取文檔
GET /products/_doc/1001# 更新文檔
POST /products/_update/1001
{"doc": {"price": 259.0}
}# 刪除文檔
DELETE /products/_doc/1001

三、搜索API核心機制

1. 搜索端點

所有搜索請求發送到_search端點:

GET /products/_search

2. 兩種查詢方式對比

方式語法示例適用場景
URL參數查詢?q=category:電子產品快速簡單查詢
DSL請求體查詢JSON結構描述復雜查詢邏輯生產環境推薦使用

四、查詢DSL深度解析

1. 全文搜索 - match查詢

GET /products/_search
{"query": {"match": {"name": {"query": "降噪耳機","operator": "and"}}}
}
  • 對文本 分詞處理 ( “降噪耳機” → [“降噪”,“耳機”])

  • operator參數:and(必須全部包含) 或 or(包含任意詞)

2. 精確匹配 - term查詢

GET /products/_search
{"query": {"term": {"category.keyword": {"value": "電子產品"}}}
}
  • 注意使用.keyword子字段進行未分詞的精確匹配

  • 適用于狀態、標簽等離散值字段

3. 范圍查詢 - range

GET /products/_search
{"query": {"range": {"price": {"gte": 200,"lte": 500}}}
}
  • 支持操作符:gt(>), gte(>=), lt(<), lte(<=)

  • 適用于數值、日期范圍過濾

4. 布爾組合 - bool查詢

GET /products/_search
{"query": {"bool": {"must": [{"match": {"name": "耳機"}}],"should": [{"term": {"category.keyword": "促銷品"}},{"range": {"price": {"lte": 199}}}],"must_not": [{"term": {"brand.keyword": "A品牌"}}],"filter": [{"term": {"in_stock": true}}],"minimum_should_match": 1}}
}
子句作用是否影響相關性評分
must必須滿足,相當于AND
should應該滿足,相當于OR
must_not必須不滿足,相當于NOT
filter必須滿足,但不參與評分

5. 短語搜索 - match_phrase

GET /products/_search
{"query": {"match_phrase": {"description": {"query": "高清防水","slop": 3}}}
}

-要求詞語 按順序完整出現

-slop參數允許中間間隔的詞數

五、搜索結果處理技巧

1. 分頁與排序

GET /products/_search
{"from": 10,"size": 5,"sort": [{"price": {"order": "asc"}},{"_score": {"order": "desc"}}],"query": {...}
}

2. 字段過濾

GET /products/_search
{"_source": ["name", "price"],"query": {...}
}

3. 結果分析

典型搜索結果結構:

{"took": 15,                 // 查詢耗時(ms)"timed_out": false,"hits": {"total": {"value": 42,            // 匹配總數"relation": "eq"},"max_score": 1.234,       // 最高得分"hits": [                 // 結果數組{"_index": "products","_id": "1001","_score": 1.234,"_source": {          // 原始文檔"name": "無線藍牙耳機","price": 299.0}}]}
}

六、最佳實踐與避坑指南

  1. 精確匹配陷阱
    ?字符串字段默認同時創建textkeyword類型,精確匹配需用字段名.keyword

  2. 性能優化

"bool": {"filter": [   // 不參與評分的條件放filter{"range": {"created_at": {"gte": "now-30d/d"}}}]
}
  1. 深度分頁問題
    ?避免使用from+size處理超過10,000條的結果集,改用search_afterscrollAPI
  2. 安全防護
    ?生產環境必須啟用:

?? - X-Pack安全模塊

?? - API密鑰認證

?? - 網絡訪問控制

七、學習資源推薦

  1. 官方文檔:Elasticsearch Reference
  2. 實戰工具:
    - Kibana Dev Tools
    - Postman
    - curl命令
    附錄:常用查詢速查表
查詢類型用途示例
match全文搜索{“match”: {“title”: “ES”}}
term精確值匹配{“term”: {“status”: 1}}
range范圍查詢{“range”: {“age”: {“gte”: 18}}}
bool組合多個查詢條件見第四節示例
match_phrase短語搜索{“match_phrase”: {“quote”: “to be or”}}

下集預告《Elasticsearch RESTful API入門:全文搜索實戰》

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

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

相關文章

(六)復習(OutBox Message)

文章目錄 項目地址一、OutBox Message1.1 OutBox表配置1. OutBoxMessage類2. OutboxMessage表配置3. 給每個模塊生成outboxmessage表1.2 發布OutBox Message1. 修改Intercepotor2. 配置Quartz3. 創建Quatz方法發布領域事件4. 創建Quatz定時任務5. 注冊Quatz服務和配置6. 流程梳…

STM32-ADC內部溫度

在通道16無引腳&#xff08;測量溫度不準確&#xff09;跟ADC代碼差不多&#xff1b;不需要使能引腳時鐘&#xff1b;將內部溫度測量打開/*** brief 啟用或禁用溫度傳感器和內部參考電壓功能* param NewState: 新的功能狀態&#xff0c;取值為ENABLE或DISABLE* retval 無* no…

「Linux命令基礎」文本模式系統關閉與重啟

關機重啟基本命令 直接拔掉計算機電源可能損壞內部元件;Linux系統通過命令關閉計算機則是安全流程,讓所有程序有機會保存數據、釋放資源。 關機命令:shutdown Linux系統提供了多種用于關閉或重啟系統的命令,其中 shutdown 是最常用的一種,它可以安全地通知用戶系統即將…

射頻信號(大寬高比)時頻圖目標檢測anchors配置

一、大寬高比目標YOLO檢測參數設置 這是yolov7的一個label的txt文件&#xff1a; 1 0.500 0.201 1.000 0.091 2 0.500 0.402 1.000 0.150 3 0.500 0.604 1.000 0.093 0 0.500 0.804 1.000 0.217 對應的樣本&#xff1a; 長寬比分別是&#xff1a;1/0.09110.98, 1/0.1506.67…

OpenStack 鑒權服務介紹.md

引言 OpenStack是一個開源的云計算管理平臺&#xff0c;其中的Keystone組件承擔了身份認證和授權的關鍵任務。Keystone的主要功能包括管理用戶及其權限、維護OpenStack Services的Endpoint&#xff0c;以及實現認證&#xff08;Authentication&#xff09;和鑒權&#xff08;Au…

Linux_3:進程間通信

IPC1.什么是IPC&#xff1f;Inter Process Communication2.進程間通信常用的幾種方式1&#xff0c;管道通信&#xff1a;有名管道&#xff0c;無名管道2&#xff0c;信號- 系統開銷小3&#xff0c;消息隊列-內核的鏈表4&#xff0c;信號量-計數器5&#xff0c;共享內存6&#x…

【Springboot】Bean解釋

在 Spring Boot 中&#xff0c;Bean 就像是你餐廳里的一名員工。比如&#xff0c;你有一名服務員&#xff08;Service&#xff09;、一名廚師&#xff08;Chef&#xff09;和一名收銀員&#xff08;Cashier&#xff09;。這些員工都是餐廳正常運轉所必需的&#xff0c;他們各自…

axios的post請求,數據為什么要用qs處理?什么時候不用?

為什么使用 qs 處理 POST 數據axios 的 POST 請求默認將 JavaScript 對象序列化為 JSON 格式&#xff08;Content-Type: application/json&#xff09;。但某些后端接口&#xff08;尤其是傳統表單提交&#xff09;要求數據以 application/x-www-form-urlencoded 格式傳輸&…

【unitrix】 4.21 類型級二進制數基本結構體(types.rs)

一、源碼 這段代碼定義了一個類型級數值系統的 Rust 實現&#xff0c;主要用于在編譯時表示和操作各種數值類型。 use crate::sealed::Sealed; use crate::number::{NonZero, TypedInt, Unsigned, Primitive}; // // 特殊浮點值枚舉 ///// 特殊浮點值&#xff08;NaN/∞&#x…

UI前端與數字孿生結合實踐案例:智慧零售的庫存管理優化系統

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;數字孿生重構零售庫存的 “人 - 貨 - 場” 協同在零售行業利潤率持續承壓的背景…

【Freertos實戰】零基礎制作基于stm32的物聯網溫濕度檢測(教程非常簡易)持續更新中.........

本次記錄采用Freertos的第二個DIY作品&#xff0c;基于Onenet的物聯網溫濕度檢測系統&#xff0c;此次代碼依然是全部開源。通過網盤分享的文件&#xff1a;物聯網溫濕度檢測.rar 鏈接: https://pan.baidu.com/s/1uj9UURVtGE6ZB6OsL2W8lw?pwdqm2e 提取碼: qm2e 大家也可以看看…

Matplotlib-多圖布局與網格顯示

Matplotlib-多圖布局與網格顯示一、多圖布局的核心組件二、基礎布局&#xff1a;plt.subplots()快速創建網格1. 均等分網格2. 不等分網格&#xff08;指定比例&#xff09;三、進階布局&#xff1a;GridSpec實現復雜嵌套1. 跨行列布局2. 嵌套GridSpec四、實用技巧&#xff1a;布…

GitHub上優秀的開源播放器項目介紹及優劣對比

ExoPlayer 項目地址:https://github.com/google/ExoPlayer 特點: 由Google開發,支持廣泛的視頻格式和流媒體傳輸協議,如DASH、HLS、SmoothStreaming。 提供靈活的媒體源架構和高級特性,如動態自適應流播放。 開發者可以輕松擴展和定制播放器組件,適應特定需求。 優點: 功…

react打包發到線上報錯Minified React error #130

開發過程中遇到一個問題&#xff0c;記錄一下 本地打包發布正常&#xff0c;發測試環境正常&#xff0c;可是通過Jenkins打包發布線上報錯 報錯信息 index-67fbbd81.js:39 Error: Minified React error #130; visit https://reactjs.org/docs/error-decoder.html?invariant130…

微服務項目遠程調用時的負載均衡是如何實現的?

負載均衡概述 負載均衡是微服務架構中的核心組件&#xff0c;用于將請求合理分配到多個服務實例上&#xff0c;提高系統的可用性和性能。負載均衡的分類 負載均衡大致可以分為兩類 1. 服務端負載均衡 實現位置&#xff1a;獨立部署的負載均衡服務器&#xff08;位于客戶端和服務…

【中文核心期刊推薦】中國農業科技導報

《中國農業科技導報》是中國科技核心期刊&#xff0c;也是北京大學圖書館“中文核心期刊要目總覽”收錄的期刊。它是由中國農村技術開發中心主辦&#xff0c;全面為科教興農服務的綜合性農業學術期刊。&#xfeff;《中國農業科技導報》是中國農業科學院生物技術研究所承辦的&a…

php 如何通過mysqli操作數據庫?

在PHP中&#xff0c;mysqli&#xff08;MySQL Improved Extension&#xff09;是操作MySQL數據庫的擴展庫&#xff0c;提供了面向對象和過程式兩種風格。以下是mysqli的基本操作方法&#xff1a; 1. 連接數據庫 面向對象風格 $mysqli new mysqli(localhost, username, passwor…

c/c++拷貝函數

memcpy()函數概要原型void * memcpy ( void * dest, const void * src, size_t num );功能memcpy()會復制 src 所指的內存內容的前 num 個字節到 dest所指的內存地址上&#xff08;memcpy()并不關心被復制的數據類型&#xff0c;只是逐字節地進行復制&#xff0c;這給函數的使用…

HTTP核心基礎詳解(附實戰要點)

目錄 一圖勝千言&#xff1a;HTTP核心機制圖解?編輯 一、HTTP本質&#xff1a;通信的橋梁 二、五大核心特性解析 三、HTTP頭部&#xff1a;隱藏的控制中心 四、連接管理&#xff1a;性能關鍵點 開發者必知實踐技巧 一圖勝千言&#xff1a;HTTP核心機制圖解 一、HTTP本質…

華為靜態路由配置

問題描述&#xff1a;針對兩臺筆記本和兩個路由器在不同的網段場景中&#xff0c;對兩個路由器進行靜態路由配置。下面以如下場景為例&#xff0c;介紹詳細配置過程。配置步驟&#xff1a; 1、對每個路由器的接口下配置IP地址 [huawei]interface gx/x/x [huawei-interface]ip a…