【Elasticsearch】檢索排序 分頁

檢索排序 & 分頁

  • 1.測試數據準備
  • 2.排序功能
    • 2.1 簡單字段排序
    • 2.2 多字段排序
    • 2.3 日期排序
  • 3.分頁功能
    • 3.1 基礎分頁
    • 3.2 深度分頁(不推薦大數據量使用)
    • 3.3 使用 search_after 進行高效分頁
  • 4.綜合示例:高亮+排序+分頁
  • 5.實踐建議

1.測試數據準備

首先,我們創建一個名為 blog_posts 的索引,并插入一些測試數據:

PUT /blog_posts
{"mappings": {"properties": {"title": { "type": "text" },"content": { "type": "text" },"author": { "type": "keyword" },"views": { "type": "integer" },"publish_date": { "type": "date" },"tags": { "type": "keyword" }}}
}
POST /blog_posts/_bulk
{"index":{}}
{"title":"Elasticsearch Basics","content":"Learn the basics of Elasticsearch and how to perform simple queries.","author":"John Doe","views":1500,"publish_date":"2023-01-15","tags":["search","database"]}
{"index":{}}
{"title":"Advanced Search Techniques","content":"Explore advanced search techniques in Elasticsearch including aggregations and filters.","author":"Jane Smith","views":3200,"publish_date":"2023-02-20","tags":["search","advanced"]}
{"index":{}}
{"title":"Data Analytics with ELK","content":"How to use the ELK stack for data analytics and visualization.","author":"John Doe","views":2800,"publish_date":"2023-03-10","tags":["analytics","elk"]}
{"index":{}}
{"title":"Elasticsearch Performance Tuning","content":"Tips and tricks for optimizing Elasticsearch performance in production environments.","author":"Mike Johnson","views":4200,"publish_date":"2023-04-05","tags":["performance","optimization"]}
{"index":{}}
{"title":"Kibana Dashboard Guide","content":"Creating effective dashboards in Kibana for monitoring and analysis.","author":"Jane Smith","views":1900,"publish_date":"2023-05-12","tags":["kibana","visualization"]}

在這里插入圖片描述

2.排序功能

能排序的字段都具備正排索引,單 text 類型字段是不可以排序的。如果要使 text 字段支持排序、聚合,則需要開啟 fielddata

sort 是和 query 平級的,并不會被 query 包含。

2.1 簡單字段排序

GET /blog_posts/_search
{"query": {"match_all": {}},"sort": [{"views": {"order": "desc"}}]
}

在這里插入圖片描述

2.2 多字段排序

GET /blog_posts/_search
{"query": {"match_all": {}},"sort": [{"author": {"order": "asc"}},{"views": {"order": "desc"}}]
}

在這里插入圖片描述

2.3 日期排序

GET /blog_posts/_search
{"query": {"match_all": {}},"sort": [{"publish_date": {"order": "desc"}}]
}

在這里插入圖片描述

3.分頁功能

Elasticsearch 支持對查詢結果進行分頁處理,允許用戶逐步獲取和瀏覽大量數據。

在編寫查詢語句時,可通過再請求體中添加 fromsize 字段實現分頁。from 表示結果集的起始位置,而 size 表示每頁返回的文檔數量。

如果將 from 設置為 11 11 11size 設置為 5 5 5,則返回的是第 10 10 10 ~ 14 14 14 條數據(默認從第 0 0 0 條開始)。

3.1 基礎分頁

GET /blog_posts/_search
{"query": {"match_all": {}},"from": 0,"size": 2,"sort": [{"publish_date": {"order": "desc"}}]
}

在這里插入圖片描述

3.2 深度分頁(不推薦大數據量使用)

深度分頁 指的是在 Elasticsearch 中查詢結果集 非常靠后的頁碼(例如第 1000 1000 1000 頁,每頁 10 10 10 條數據,即 from=10000)。它通常表現為使用 from + size 參數組合來獲取遠端的分頁數據。

? 不推薦的詳細原因可參考我的另一篇博客:《【Elasticsearch】深度分頁及其替代方案》。

當然,我們這里測試的數據沒有那么多。

GET /blog_posts/_search
{"query": {"match_all": {}},"from": 3,"size": 2
}

在這里插入圖片描述

3.3 使用 search_after 進行高效分頁

首先獲取第一頁:

GET /blog_posts/_search
{"query": {"match_all": {}},"size": 2,"sort": [{"views": {"order": "desc"}},{"_id": {"order": "asc"}}]
}

在這里插入圖片描述

然后使用最后一個結果的排序值獲取下一頁:

GET /blog_posts/_search
{"query": {"match_all": {}},"size": 2,"search_after": [3200, "上一頁最后一個文檔的ID"],"sort": [{"views": {"order": "desc"}},{"_id": {"order": "asc"}}]
}

在這里插入圖片描述
在這里插入圖片描述

4.綜合示例:高亮+排序+分頁

GET /blog_posts/_search
{"query": {"multi_match": {"query": "search","fields": ["title", "content"]}},"highlight": {"fields": {"title": {},"content": {"fragment_size": 100,"number_of_fragments": 2}}},"sort": [{"views": {"order": "desc"}}],"from": 0,"size": 3
}

在這里插入圖片描述

5.實踐建議

功能
實踐建議
高亮
  • 對于大文本字段,限制 fragment_sizenumber_of_fragments 以提高性能。
  • 考慮使用 require_field_match: true 來只高亮查詢中指定的字段。
排序
  • 對于文本字段排序,使用 .keyword 子字段或設置 fielddata: true
  • 避免對未索引或分析的字段進行排序。
  • 對于分頁場景,使用包含唯一值的排序條件(如 _id)。
分頁
  • 避免深度分頁(超過 1000 1000 1000 條記錄)),使用 search_after 代替。
  • 對于無限滾動等場景,優先考慮 search_after 而不是 from/size
  • 考慮使用滾動 API(Scroll API)對于大數據量導出場景。

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

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

相關文章

Delta、Jackknife、Bootstrap

用班級平均身高的案例,展示 ?Delta、Jackknife、Bootstrap? 的完整計算過程。 ?0. 數據準備? ?原始數據(4個學生的身高)??: 真實均值(目標統計量)??: ?1. Delta 方法(公式…

企業智腦技術架構設計:緊貼企業場景規劃面向未來的發展趨勢與實現路徑

摘要 本文深入探討了企業智腦技術架構的設計理念與發展趨勢,分析了當前企業智能化轉型的技術需求與挑戰,提出了一個面向未來的企業智腦技術架構設計方案。文章從底層技術支撐、核心能力構建、應用場景適配、安全合規保障以及未來發展路徑五個維度展開論…

新手向:Python方向講解

從NASA火星任務到TikTok推薦算法,從自動化腳本到量子計算,Python用import antigravity重新定義了編程邊界 一、設計哲學:優雅明確的編程禪學 Python之禪(import this): 優美勝于丑陋(Beautifu…

Chrome谷歌瀏覽器插件ModHeader,修改請求頭,開發神器

文章目錄一、介紹與下載二、使用一、介紹與下載 ModHeader顧名思義就是讓我們可以自定義HTTP請求頭或者是重寫響應頭,包括新增請求頭/響應頭或者覆蓋Chrome瀏覽器設置的請求頭的默認值,同時還可以根據URL Pattern來只對特定網站生效。 有條件的同學可以…

SEW:無監督預訓練在語音識別中的性能-效率權衡

摘要 本文研究了自動語音識別(ASR)中預訓練模型的性能-效率權衡問題。我們聚焦于 wav2vec 2.0,并形式化了多種影響模型性能和效率的架構設計。基于所有觀察結果,我們提出了 SEW(Squeezed and Efficient Wav2vec&#…

linux系統部署express+vue項目

一、準備階段: 1、安裝linux上所需要的環境:npm nodejs nginx pm2 //安裝 npm(Node 包管理器) sudo apt install npm//判斷是否安裝成功 npm -v//安裝 Node.js(可以根據需要選擇版本) sudo apt inst…

PixiJS教程(004):點擊事件交互

1.6 事件交互實現要求:點擊寶劍,修改寶劍的顏色。1??實現代碼: // 為精靈添加交互事件 sprite.interactive true; sprite.on(click, () > {// 點擊精靈時,改變精靈的顏色sprite.tint Math.random() * 0xFFFFFF; });說明&am…

創客匠人助力家庭教育IP破局:從0到1打造創始人個人品牌全攻略

一、IP定位:細分賽道的精準錨定與用戶畫像構建 在家庭教育8000億市場規模的競爭中,創始人IP的差異化定位成為破局關鍵。創客匠人通過“標簽化定位”工具,幫助教育者鎖定垂直領域,如親子溝通、青春期教育等細分賽道。以景麗霞老師…

使用堅果云擴容Zotero同步空間的簡單快捷方法

本文介紹基于堅果云的WebDAV協議,用于文獻管理軟件Zotero的文件同步,從而實現Zotero存儲空間擴容的方法。 在之前的文章Zotero文獻管理軟件入門使用方法:軟件下載、文獻導入、引文插入(https://blog.csdn.net/zhebushibiaoshifu/a…

Java啟動腳本

Java啟動腳本 編寫代碼,然后打包 Java-1.0-SNAPSHOT.jar public class test {public static void main(String[] args) {System.out.println("Hello IDEA");} }編寫運行腳本 #!/bin/sh WORKDIR$(cd $(dirname $0); pwd) cd $WORKDIRexport JAVA_OPTS"…

VSCode使用ssh遠程連接阿里云

1. 終端選擇 Windows使用PowerShell Ubuntu和Mac使用Terminal 2. 設置ssh 2.1. 第一臺電腦 生成密鑰 ssh-keygen -o -t rsa -b 4096 -C "emailexample.com" 按三次回車 查看密鑰 cat ~/.ssh/id_rsa.pub 拷貝密鑰,粘貼到服務器的密鑰框中 2.2. 第…

XLSR-Wav2Vec2:用于語音識別的無監督跨語言表示學習

摘要 本文提出了 XLSR,該方法通過從多種語言的原始語音波形中預訓練單個模型,以學習跨語言的語音表示。我們基于 wav2vec 2.0 構建模型,該方法通過對掩蔽后的潛在語音表示解決對比任務進行訓練,并聯合學習在多種語言之間共享的潛…

圖靈完備之路(數電學習三分鐘)----數據選擇器與總線

1.數據選擇器之前我們學習了邏輯與算數的計算,得知兩個數字之間的加減和與或的結果是不同的,而一個通用的數字電路不可能只有一個功能,所以我們將在本節引入電路選擇器這一“器件”,來實現對兩個輸入的運算方式的選擇,…

Linux下如何設置CUDA的路徑

今天遇到一個關于CUDA的問題,我要跑的深度學習代碼,他里面有cuda編程,需要編譯。但是你運行就報錯。 代碼提示我大段報錯。 (score-denoise) ubuntuGPUA10002:~/wbd/score-denoise_Transformerdepth20$ python train.py Detected CUDA fil…

js樹的排序

樹 樹的前中后序遍歷 樹是一種重要的非線性數據結構,尤其是二叉樹。二叉樹的遍歷是操作樹的基礎,主要有前序遍歷、中序遍歷和后序遍歷三種方式。 前序遍歷 訪問順序:根結點 -> 左子樹 -> 右子樹。 遍歷規則:首先訪問根結…

解碼 Red Stuff:Walrus 高效可靠存儲的引擎

Red Stuff 是 Walrus 所采用的二維(2D)糾刪碼協議,定義了數據如何被編碼和存儲。它是實現高效、安全、且高可用的去中心化存儲的關鍵。通過 Red Stuff,Walrus 成功解決了去中心化存儲系統常見的三大難題:安全性、復制效…

【ACP】阿里云云計算高級運維工程師--ACP

文章目錄1、簡要介紹2、核心特點3、考試相關信息4、適合人群1、簡要介紹 阿里云云計算認證ACP(Alibaba Cloud Certified Professional)是面向云計算技術與應用從業者的專業級認證,旨在評估考生對阿里云云計算產品的理解、部署、運維及最佳實…

快速掌握Python編程基礎

干貨分享,感謝您的閱讀!備注:本博客將自己初步學習Python的總結進行分享,希望大家通過本博客可以在短時間內快速掌握Python的基本程序編碼能力,如有錯誤請留言指正,謝謝!(持續更新&a…

「Java案例」雞兔同籠問題

案例解析 雞兔同籠求解 《孫子算經》是中國古代重要的數學著作,成書于南北朝時期,其中就記載了一個有趣的問題:雞和兔在同一個籠子里,雞和兔共有n條腿, m個頭,問雞和兔各有多少只?編寫一個程序…

BLDC電機-運動控制---stm32時鐘樹定時器SYSTICKRTC的學習

一、時鐘樹 二、基本定時器 三、通用定時器 四、高級定時器 五、SYSTICK 六、RTC