【高級篇】第6章 Elasticsearch 高級查詢與搜索優化

在Elasticsearch的深入應用之旅中,掌握高級查詢技巧與優化搜索性能是提升數據處理效率的關鍵。本章將帶你深入探索Elasticsearch的高級查詢特性,揭示搜索性能優化的奧秘,以及如何利用高亮與建議API增強用戶體驗。

6.1 復雜查詢

6.1.1 Nested查詢

Nested基本概念與用法:

在Elasticsearch中,nested類型是一種特殊的數據類型,用于存儲復雜對象數組,使得數組中的每個對象作為一個獨立的、完整的文檔對待,而非簡單地扁平化處理。這意味著,數組內的每個對象都可以擁有自己的元數據,包括獨立的評分、分析設置等。這種設計特別適用于那些數組元素之間存在一對一關聯關系,且需要單獨查詢或聚合的情況,比如訂單中的商品列表、文章中的評論列表等。

nested查詢正是針對這種數據結構設計的,它允許你深入到數組內部,對每個對象單獨進行匹配和過濾。與之相對的是普通對象字段上的查詢,后者無法區分數組內各對象的獨立性。

實際案例:

假設有一個電商網站,其訂單索引ecommerce_orders中每個訂單文檔包含一個名為products的nested字段,記錄了訂單中所有商品的信息,包括商品ID(product_id)、商品名稱(product_name)和購買數量(quantity)。

案例需求: 我們需要找到所有包含商品名稱為“MacBook Pro”的訂單,并且關心這些訂單中具體是哪些商品滿足條件。

查詢示例:

GET /ecommerce_orders/_search
{"query": {"nested": {"path": "products",  // 指定nested字段的路徑"query": {           // nested查詢內部的查詢條件"match": {"products.product_name": "MacBook Pro"}},"inner_hits": {       // 請求包含匹配nested對象的詳細信息"_source": ["products.product_name", "products.quantity"]}}}
}

解析:

  • 查詢路徑(path): 指定了執行nested查詢的字段名稱,這里是products
  • 內部查詢(query): 使用match查詢,針對products.product_name字段查找值為“MacBook Pro”的記錄。
  • inner_hits: 這是一個關鍵選項,它讓每個匹配的nested對象在結果中單獨列出,展示指定的_source字段,這里我們只關心商品名稱和購買數量。

查詢結果示例:

{"hits": {"total": {"value": 2, // 假設有兩個訂單包含"MacBook Pro""relation": "eq"},"hits": [{"_source": {"order_id": "123","products": [// 其他商品省略...{"product_id": "456","product_name": "MacBook Pro","quantity": 1}]},"inner_hits": {"products": [{"_source": {"product_id": "456","product_name": "MacBook Pro","quantity": 1}}]}},// 另一訂單信息省略...]}
}

通過這個案例,我們不僅找到了包含特定商品的訂單,還通過inner_hits獲得了這些訂單中具體匹配商品的詳細信息,為后續的分析和處理提供了便利。

6.1.2 Parent/Child查詢

Parent/Child基本概念與用法:

在Elasticsearch中,Parent/Child關系是一種特殊的文檔關系模型,用于表示一對多的關聯關系。與Nested

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

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

相關文章

IT設備監控模板:支持多種監控工具和平臺的集成和整合

IT設備監控模板管理在支持多種監控工具和平臺方面發揮著關鍵作用,它通過提供統一的配置和管理界面,使運維人員能夠靈活地適應和整合不同的監控工具和平臺。以下是IT設備監控模板管理如何支持多種監控工具和平臺的具體方式: 一、抽象化和標準…

如何使用AI學習一門編程語言?

無論你是軟件開發新手還是擁有幾十年的豐富經驗,總是需要學習新知識。TIOBE Index追蹤50種最受歡迎的編程語言,許多生態系統為職業發展和橫向轉型提供了機會。鑒于現有技術具有的廣度,抽空學習一項新技能并有效運用技能可能困難重重。 最近我…

ARCGIS python 裁剪柵格函數 arcpy.management.Clip

ARCGIS python 裁剪柵格函數 arcpy.management.Clip 1 功能 裁剪掉柵格數據集、鑲嵌數據集或圖像服務圖層的一部分。 2 使用情況 基于模板范圍提取部分柵格數據集,輸出與模板范圍相交的所有像素使用以 x 和 y 坐標的最小值和最大值確定的包絡矩形或使用輸出范圍文…

MATLAB-振動問題:單自由度阻尼振動系統受迫振動

一、基本理論 二、MATLAB實現 單自由度阻尼振動系統受迫振動,MATLAB代碼如下: clear; clc; close allA 1; psi 0; F0 10; D 20; Rm 0.5; M 1; omega 2; delta Rm / (2*M); omega0 sqrt(D / M); Omega sqrt(omega0^2 - delta^2); Zm Rm i *…

多線程的三種創建方式

繼承Thread類的方式進行實現 public class MyThread extends Thread{ Override public void run(){//多線程具體業務邏輯} }在main方法里面創建子類對象,開啟線程 public static void main(String[] args) {MyThread t1 new MyThread(); MyThread t2 new MyThrea…

LLM大模型工程師面試經驗寶典--基礎版(2024.7月最新)

1.簡單介紹一下大模型【LLMs】? 大模型:一般指1億以上參數的模型,但是這個標準一直在升級,目前萬億參數以上的模型也有了。大語言模型(Large Language Model,LLM)是針對語言的大模型。 2.目前主…

基于布雷格曼偏差校正技術的全變分一維時間序列信號降噪方法(MATLAB R2018A)

信號降噪是信號處理的重要步驟之一,目的是提高所獲得信號數據的質量,以達到更高的定性和定量分析精度。信號降噪能提升信號處理其他環節的性能和人們對信息識別的準確率,給信號處理工作提供更可靠的保證。信號降噪的難點是降低噪聲的同時也會…

69. x 的平方根(簡單)

69. x 的平方根 1. 題目描述2.詳細題解3.代碼實現3.1 Python方法一:逐個遍歷方法二:二分查找 3.2 Java 1. 題目描述 題目中轉:69. x 的平方根 2.詳細題解 不能使用系統內置的函數,尋找某個數(假定為x)的…

網絡請求的高效處理:C++ libmicrohttpd庫詳解

一、libmicrohttpd簡介 libmicrohttpd是一個小型的C語言庫,用于創建HTTP服務器和客戶端。它提供了HTTP 1.1協議的完整實現,包括持久連接、管道化請求、虛擬主機等特性。libmicrohttpd的特點是: 輕量級:易于集成到C或C項目中。跨…

微信好友不小心拉黑了?這樣操作,友誼的小船不會翻

在數字化時代,微信已成為我們社交生活的核心,它不僅連接著親朋好友,更承載著我們的情感與回憶。 然而,情緒波動時,我們可能會一時沖動,將某些好友誤送入黑名單。但別擔心,今天,就讓…

IMU在手語識別中的應用

近期,一款由美國和中國科研團隊聯合研發的新型的穿戴設備——SignRing,以其獨特的IMU(慣性測量單元)技術,為聾啞人士的手語識別帶來了革命性的突破。SignRing不僅極大地擴展了手語識別的詞匯量,更提高了識別…

二維數組-----螺旋性矩陣輸出

題目有點難,ok其實是很難。。。 觀察樣例輸出,不難發現,螺旋數組中元素的遞增軌跡為:右右右、下下下、左左左、上上上 簡明為:右、下、左、上。可以設開始遞增的元素1的位置為(x,y)&#xff0c…

由跨域引發一些思考

由跨域引發一些思考 前言什么是跨域?為什么會產生跨域?跨域場景示例:跨域常見的解決方法:JSONP(JSON with Padding)CORS(Cross-Origin Resource Sharing)document.domain iframeloc…

AutoHotKey自動熱鍵(二)中文版幫助手冊下載和自定義一般鍵盤快捷鍵

所有的操作其實在開發者手冊中已經交待完了,所以我們要使用中文的手冊來進行使用 autohotkey1.1.15中文手冊下載 好了,為什么有了中文手冊,這里還要進行一些具體的介紹呢,就是為了讓大家少踩坑,能夠快速形成生產力 這里先講一下自定義快捷鍵WIN鍵和ALT鍵和CTRL鍵和SHIFT鍵的組…

智慧的網絡爬蟲之CSS概述

智慧的網絡爬蟲之CSS概述 ? CSS 是“Cascading Style Sheet”的縮寫,中文意思為“層疊樣式表”,用于描述網頁的表現形式。如網頁元素的位置、大小、顏色等。css的主要作用是定義網頁的樣式。 CSS樣式 1. 行內樣式 行內樣式:直接定義在 HT…

深入理解Git:fetch與pull的區別與運用

在Git的版本控制世界中,fetch和pull是兩個至關重要的命令,它們都與從遠程倉庫獲取數據有關。然而,這兩個命令在功能和用法上卻存在著顯著的差異。本文將詳細解析fetch和pull的區別,以及它們在實際開發中的應用,幫助讀者…

Qt 5.14.2+Android環境搭建

1. 安裝QT5.14.2的過程中,選中套件(kit) qt for android。 如果已經安裝了qt creator但沒有安裝該套件,可以找到在qt安裝目錄下的MaintenanceTool.exe,運行該程序添加套件。 2. 安裝jdk8,android sdk&…

五分鐘了解MQ消息集成

一、MQ消息集成的定義 MQ消息集成是通過消息中間件(Message Queue)實現的一種數據集成方式。它通過將數據發送到中間件中,再從中間件中接收數據,實現不同系統之間的數據交換。在MQ消息集成中,發送者和接收者之間不需要…

vue3.2及以上 父調子的方法defineExpose定義供父調用的方法及屬性

1、定義子類LoginForm&#xff1a; function handleLogin(account, token) {console.log(account,token)}defineExpose({handleLogin,}); 2、父類調用子類組件 const loginFormRef ref(); <LoginForm ref"loginFormRef" />loginFormRef.value.handleLogin(…

代碼隨想錄第38天|動態規劃

1049. 最后一塊石頭的重量 II 參考 備注: 當物體容量也等同于價值時, 01背包問題的含義則是利用好最大的背包容量sum/2, 使得結果盡可能的接近或者小于 sum/2 等價: 盡可能的平分成相同的兩堆, 其差則為結果, 比如 (abc)-d, (ac)-(bd) , 最終的結果是一堆減去另外一堆的和, 問…