分布式搜索(Elasticsearch)深入用法

目錄

數據聚合

聚合的種類

DSL實現聚合

桶聚合

度量聚合

RestAPI實現聚合

多條件聚合

自動補全

拼音分詞器

自定義分詞器

自動補全查詢

實現搜索框自動補全

數據同步

數據同步思路分析

實現elasticsearch與數據庫數據同步

集群

搭建ES集群

集群腦裂問題

集群故障轉移

集群分布式存儲

集群分布式查詢


數據聚合

聚合的種類

聚合可以實現對文檔數據的統計、分析、運算。聚合常見的有三類:

桶聚合:用來對文檔做分組

? ? ? ? ? ?TermAggregation:按照文檔字段值分組

? ? ? ? ? ?Date Histogram:按照日期階梯分組,例如一周為一組,或者一月為一組

度量聚合:用以計算一些值,比如:最大值、最小值、平均值等

? ? ? ? ? ?Avg:求平均值

? ? ? ? ? Max:求最大值

? ? ? ? ? Min:求最小值

? ? ? ? ? Stats:同時求max、min、avg、sun等

管道聚合:其它聚合結果為基礎做聚合

參與聚合的字段類型必須是:

keyword

數值

日期

布爾

DSL實現聚合

桶聚合

默認情況下,桶聚合會統計桶內的文檔數量,記為_count,并且按照_count 降序排序。我們可以修改結果排序方式:

?默認情況下,桶聚合是對索引庫的所有文檔做聚合,我們可以限定要聚合的文檔范圍,只要添加query條件即可:

度量聚合

例如,我們要求獲取每個品牌的用戶評分的min、max、avg等值.

RestAPI實現聚合

聚合請求的構造

聚合結果的解析

多條件聚合

多條件聚合構建

結果解析

自動補全

拼音分詞器

使用拼音分詞

要實現根據字母做補全,就必須對文檔按照拼音分詞。插件:infinilabs/analysis-pinyin: 🛵 This Pinyin Analysis plugin is used to do conversion between Chinese characters and Pinyin.

下載完將壓縮包解壓到es的plugins目錄即可

自定義分詞器

Elasticsearch 中分詞器(Analyzer)的組成包含三部分:

  1. Character Filters(字符過濾器)

    • 在 Tokenizer 之前對原始文本進行預處理。

    • 例如:刪除特殊字符、替換字符(如將?&?替換為?and)。

  2. Tokenizer(分詞器)

    • 將文本按照特定規則切割成詞條(Term)。

    • 例如:

      • keyword:不分詞,將整個文本作為一個詞條。

      • ik_smart:智能切分(粗粒度分詞)。

  3. Token Filters(詞條過濾器)

    • 對 Tokenizer 輸出的詞條進行進一步處理。

    • 例如:大小寫轉換、同義詞處理、拼音處理等。

我們可以在創建索引庫時,通過setting來配置自定義的analyzer(分詞器):

自定義分詞器配置

拼音分詞器適合在創建倒排索引的時候使用,但不能在搜索的時候使用。

因此字段在創建倒排索引時應該用my_analyzer分詞器;字段在搜索時應該使用ik__smart分詞器;

自動補全查詢

es提供了Completion Suggerter查詢來實現自動補全功能。這個查詢會匹配以用戶輸入內容開頭的詞條并返回。為了提高補全查詢的效率,對于文檔中字段的類型有一些約束:

? 參與補全查詢的字段必須是completion類型。

??

字段的內容一般是用來補全的多個詞條形成的數組

查詢語法

實現搜索框自動補全

1.修改索引庫,設置自定義拼音分詞器

2.修改索引庫的name、all字段,使用自定義分詞器

3.索引庫添加一個新字段suggestion,類型為completion 字段,使用自定義分詞器

4.給實體類添加suggestion字段,內容包含所需要補詞的內容

5.重新導入數據

RestAPI實現自動補全

結果解析

數據同步

數據同步問題分析

es中酒店數據來自于mysql數據庫,因此mysql數據發生改變時,es也必須跟著改變,這個就是es與mysql之間的數據同步。

數據同步思路分析

方案一:同步調用

優點:實現簡單,粗暴

缺點:耦合度高

方案二:異步通知

優點:低耦合,實現難度一般

缺點:依賴mq的可靠性

方案三:監聽binlog

優點:完全接觸服務間耦合

缺點:開啟binlog增加數據庫負擔、實現復雜度高

實現elasticsearch與數據庫數據同步

利用MQ實現mysql與es數據同步

步驟:

導入數據

聲明exchange、queue、RoutingKey

完成數據庫中增、刪、改業務并完成消息發送

完成消息監聽并且更新es中數據

導入MQ依賴

配置MQ

集群

ES集群結構

單機的es做數據存儲,必然面臨兩個問題:海量的數據存儲問題、單點故障問題。

海量數據存儲問題:將索引庫從邏輯上拆分為N個分片,存儲到多個節點

單點故障問題:將分片數據在不同節點備份

搭建ES集群

利用docker容器模擬3個es的節點。

集群腦裂問題

集群故障轉移

集群分布式存儲

集群分布式查詢

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

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

相關文章

java:接口與實現類

1. Java 基礎層面接口(Interface) 只是方法的定義/規范,里面沒有真正的邏輯。例如:public interface IBookService {boolean save(Book book); }👉 這里只說明了:我要有一個 save 方法,但“怎么…

Chrome 插件開發實戰:從入門到進階

1.1 Chrome 插件的魅力與應用場景Chrome 插件是增強 Chrome 瀏覽器功能的得力助手,能實現廣告攔截、密碼管理、標簽管理等實用功能。在日常辦公中,我們可以借助插件提升效率,如自動填充表單、快速保存網頁內容;在瀏覽網頁時&#…

通過官方文檔詳解Ultralytics YOLO 開源工程-熟練使用 YOLO11實現分割、分類、旋轉框檢測和姿勢估計(附測試代碼)

目錄 前言: 1.了解ultralytics工程與yolo模型 1.1 yolo11可以為我們做些什 1.2 yolo11模型的高性能 1.3 對于yolo11一些常見的問題 1.3.1 YOLO11 如何以更少的參數實現更高的精度? 1.3.2 YOLO11 可以部署在邊緣設備上嗎? 2. 深入了解y…

vue實現小程序oss分片上傳

隨著小程序越來越普及,小程序上傳文件必不可少,那么上傳的文件大小就不可控了,小則幾mb,大到好幾百mb,小文件還可以,但是一到超過200mb或稍微再大些的小程序就很容易上傳失敗,導致功能不能繼續進行。以下我們就來解決這個問題,將大文件實現分片上傳 溫馨提示,不要看內…

14.Shell腳本修煉手冊--玩轉循環結構(While 與 Until 的應用技巧與案例)

while 循環和 until 循環的應用實踐 文章目錄while 循環和 until 循環的應用實踐當型和直到型循環:兩種 "重復" 的邏輯while 循環:滿足條件就繼續until 循環:不滿足條件就繼續基礎示例:從簡單場景學用法示例 1&#xff…

chromadb使用hugging face模型時利用鏡像網站下載注意事項

chromadb默認使用sentence-transformers/all-MiniLM-L6-v2的詞嵌入(詞向量)模型,如果在程序首次運行時,collection的add或query操作時如果沒有指定embeddings或query_embeddings,程序會自動下載相關嵌入向量模型&#…

基于大模型的對話式推薦系統技術架構設計

注:此文章內容均節選自充電了么創始人,CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》(跟我一起學人工智能)【陳敬雷編著】【清華大學出版社】 清華《GPT多模態大模型與AI Agent智能體》書籍配套視頻課程【陳敬雷…

第1章 React組件開發基礎

在掌握React開發之前,我們需要先建立扎實的組件開發基礎。這些基礎知識不僅影響你的開發效率,更決定了應用程序的性能、可維護性和團隊協作的順暢程度。 本章將深入探討React組件開發的核心技巧,從JSX語法優化到組件架構設計,幫你建立正確的React開發思維模式。 ??? 本…

【yocto】Yocto Project 配置層(.conf)文件語法詳解

【加關注,不迷路,持續輸出中...】Yocto Project 是一個開源的嵌入式 Linux 系統構建框架,其核心是通過元數據(Metadata)來定義如何構建系統。這些元數據主要包括配方(.bb / .bbappend)、配置&am…

知識蒸餾 Knowledge Distillation 序列的聯合概率 分解成 基于歷史的條件概率的連乘序列

知識蒸餾 Knowledge Distillation 序列的聯合概率 分解成 基于歷史的條件概率的連乘序列 flyfish 代碼實踐 論文 Generalized Knowledge Distillation (GKD) On-Policy Distillation of Language Models: Learning from Self-Generated Mistakes 自回歸分解 將 “序列的聯合…

React15.x版本 子組件調用父組件的方法,從props中拿的,這個方法里面有個setState,結果調用報錯

在React 15.x中,子組件通過props調用父組件包含setState的方法時出現錯誤,最常見的原因是父組件方法的this指向丟失,導致調用setState時出現Cannot read property setState of undefined之類的錯誤。 核心原因 React類組件的方法默認不會綁定…

交叉編譯.so到鴻蒙使用

以下是在 Ubuntu 20.04 系統上的操作,tpc_c_cplusplus 他是把編譯的流程都給寫進去了,你只需要關注你要編譯的庫配置好環境就行了。 第一步:下載 tpc_c_cplusplus 倉庫地址: GitCode - 全球開發者的開源社區,開源代碼托管平臺…

LLaMA-Factory 中配置文件或命令行里各個參數的含義

常見參數分類 & 含義對照表: 🔹模型相關參數含義model_name_or_path基礎模型的路徑(本地或 HuggingFace Hub 上的名字,如 meta-llama/Llama-2-7b-hf)adapter_name_or_pathLoRA/Adapter 權重路徑(如果要…

JavaScript 性能優化實戰技術文章大綱

一、引言1.1 背景闡述在當今 Web 應用高度交互化、復雜化的趨勢下,JavaScript 作為核心腳本語言,其性能優劣直接決定了用戶體驗的好壞。從單頁應用(SPA)的流暢運行,到復雜數據可視化的實時交互,JavaScript …

正點原子【第四期】Linux之驅動開發學習筆記-2.1LED燈驅動實驗(直接操作寄存器)

前言: 本文是根據嗶哩嗶哩網站上“正點原子【第四期】手把手教你學Linux系列課程之 Linux驅動開發篇”視頻的學習筆記,該課程配套開發板為正點原子alpha/mini Linux開發板。在這里會記錄下正點原子 I.MX6ULL 開發板的配套視頻教程所作的實驗和學習筆記內…

【GM3568JHF】FPGA+ARM異構開發板 測試命令

本章節的命令操作均在板卡的終端執行 1 初探/sys目錄 與/proc目錄類似,/sys目錄下的文件/文件夾向用戶提供了一些關于設備、內核模塊、文件系統以及其他內核組件的信息, 如子目錄block中存放了所有的塊設備;子目錄bus中存放了系統中所有的總…

【Win】Motrix+Aria2瀏覽器下載加速

系統安裝Motrix Motrix官網下載,推薦下載NSIS Installer 安裝版 瀏覽器安裝Aria2 下載Aria2插件,然后開發者模式安裝到瀏覽器 Aria2擴展選項的配置如下: 端口號需要改成Motrix的,默認是16800

SpringBoot applicationContext.getBeansOfType獲取某一接口所有實現類,應用于策略模式

本文介紹了如何在Springboot項目中通過ApplicationContext獲取接口的實現類,并通過枚舉策略模式避免if/else,展示了如何使用getBeansOfType獲取TrafficModeService的實現,以及如何在實際場景中應用,如查詢交通方式費用 1 在實際工…

大模型問題:幻覺分類+原因+各個訓練階段產生幻覺+幻覺的檢測和評估基準

1. 什么是幻覺?大模型出現幻覺,簡而言之就是“胡說八道”。 用《A Survey on Hallucination in Large Language Models》1文中的話來講,是指模型生成的內容與現實世界事實或用戶輸入不一致的現象。 研究人員將大模型的幻覺分為事實性幻覺&…

智慧冷庫物聯網解決方案——實現降本增效與風險可控的冷庫管理新范式

一、冷庫管理痛點設備孤島化:冷庫品牌、型號分散,缺乏統一接入標準,數據互通難,依賴人工巡檢,故障響應滯后。能耗黑洞:制冷系統能耗占冷庫總運營成本的60%以上,傳統管理粗放,缺乏動態…