在 Elasticsearch 中連接兩個索引

作者:來自 Elastic?Kofi Bartlett

解釋如何使用 terms queryenrich processor 來連接 Elasticsearch 中的兩個索引。

更多有關連接兩個索引的查詢,請參閱文章 “Elastic:開發者上手指南” 中的 “豐富數據及 lookup” 章節。

Elasticsearch 擁有豐富的新功能,幫助你為自己的使用場景構建最佳搜索解決方案。深入閱讀我們的示例筆記本,了解更多信息,開始免費云端試用,或立即在本地機器上嘗試 Elastic。


在 Elasticsearch 中,連接兩個索引不像傳統 SQL 數據庫那樣直接。然而,可以通過 Elasticsearch 提供的一些技術和功能實現類似的效果。本文將深入介紹在 Elasticsearch 中連接兩個索引的過程,重點講解如何使用 terms queryenrich processor

?使用 terms query 連接兩個索引

terms query 是在 Elasticsearch 中連接兩個索引最有效的方法之一。這個查詢用于檢索某個字段中包含一個或多個精確值的文檔。以下是使用它來連接兩個索引的方法:?

  1. 首先,需要從第一個索引中獲取所需的數據。這可以通過一個簡單的 GET 請求完成。
  2. 獲取到第一個索引中的數據后,可以使用這些數據去查詢第二個索引。這通過 terms query 實現,你需要指定要匹配的字段和對應的值。

下面是一個示例:

  • # 第一步:查 index A,得到 id:
GET index_a/_search
{"query": {"match": {"user": "alice"}}
}
  • 第二步:根據 index A 的結果查詢 index B
GET index_b/_search
{"query": {"terms": {"user_id": [ "123", "456" ]  # 從 index_a 拿到的 id}}
}

terms 查詢還支持使用一種稱為 terms lookup 的技術,在一次請求中執行上述兩個步驟。Elasticsearch 會自動從另一個索引中檢索匹配值。例如,你有一個名為 teams 的索引,里面包含球員列表:

PUT teams/_doc/team1
{"players":   ["john", "bill", "michael"]
}PUT teams/_doc/team2
{"players":   ["aaron", "joe", "donald"]
}

現在,可以查詢 people 索引,獲取所有在 team1 打球的人,如下所示:

GET people/_search?pretty
{"query": {"terms": {"name" : {"index" : "teams","id" : "team1","path" : "players"}}}
}

在上面的例子中,Elasticsearch 會透明地從 teams 索引中的 team1 文檔中檢索球員名字(即“john”,“bill”,“michael”),并找到所有在 people 文檔中 name 字段包含這些值的文檔。等效的 SQL 查詢如下:

SELECT p.* FROM people p
INNER JOIN teams t ON p.name = t.players

更多閱讀,請參閱 “Elasticsearch:Terms lookup query - 關聯兩個不同索引的搜索”。

使用 enrich 處理器連接兩個索引

enrich 處理器是另一個強大的工具,可以用于在 Elasticsearch 中連接兩個索引。此處理器通過從預定義的 enrich 索引中添加數據來豐富傳入文檔的數據。

以下是如何使用 enrich 處理器連接兩個索引的步驟:

  1. 首先,你需要創建一個 enrich 策略。該策略定義了要用于豐富的索引以及要匹配的字段。下面是一個示例:

    PUT /_enrich/policy/my_enrich_policy
    {"match": {"indices": "first_index","match_field": "field_in_first_index","enrich_fields": ["field_to_enrich"]}
    }
  2. ?一旦創建了策略,你需要執行它:??

    POST /_enrich/policy/my_enrich_policy/_execute
  3. 執行策略后,你可以在攝取管道中使用 enrich 處理器來豐富傳入文檔的數據:

PUT /_ingest/pipeline/my_pipeline
{"processors": [{"enrich": {"policy_name": "my_enrich_policy","field": "field_in_second_index","target_field": "enriched_field"}}]
}

在這個例子中,field_in_second_index 是第二個索引中你想要用第一個索引的數據來豐富的字段,enriched_field 是將包含豐富數據的新字段。

這種方法的一個缺點是,如果第一個索引中的數據發生變化,豐富策略需要重新執行,因為豐富索引不會自動從源索引同步或更新。然而,如果第一個索引相對穩定,那么這種方法效果很好。

更多閱讀,請參閱文章 “Elasticsearch:如何使用 Elasticsearch ingest 節點來豐富日志和指標” 及 “Elasticsearch:使用 Elasticsearch ingest pipeline 豐富數據”。

結論

總之,雖然 Elasticsearch 不支持傳統的連接操作,但它提供了像 terms 查詢和 enrich 處理器這樣的功能,可以用來實現類似的結果。需要注意的是,這些方法有其局限性,應該根據具體的需求和數據的性質謹慎使用。

原文:Joining two indexes in Elasticsearch - Elasticsearch Labs

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

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

相關文章

LabVIEW的PID參數自適應控制

在工業控制領域,PID 控制憑借結構簡單、穩定性好、工作可靠等優點被廣泛應用。然而,傳統固定參數的 PID 控制在面對復雜多變的工況時,控制效果往往難以達到最優。基于 LabVIEW 實現 PID 控制根據情況選擇參數(即參數自適應調整&am…

[redis進階四]分布式系統之哨兵(2)

目錄 一 利用docker搭建環境 板書: 一)準備?作: 板書: 解讀docker配置文件: 1)安裝docker和docker-compose 2) 停?之前的redis-server 3) 使?docker獲取redis鏡像 二)編排redis主從節點 板書:?編輯 1) 編寫docker-compose.yml 2) 啟動所有容器 3) 查看運??志 …

spark-Schema 定義字段強類型和弱類型

在數據處理和存儲中,Schema(模式)定義了數據的結構和字段屬性,其中字段的強類型和弱類型是重要的概念,直接影響數據的驗證、存儲和處理方式。以下是詳細解釋: 1. 強類型(Strongly Typed&#x…

2024睿抗編程賽國賽-題解

2024睿抗編程賽國賽題解 RC-u1 大家一起查作弊 題目重述 我們需要從給定的多行字符串中提取出所有的關鍵詞,并計算這些關鍵詞的可疑分數總和、總長度以及關鍵詞的數量。具體步驟如下: 關鍵詞定義:由大寫字母、小寫字母、數字組成的字符串&a…

控制LED燈設備

本章分別使用C庫和系統調用的文件操作方式控制開發板的LED燈,展示如何在應用層通過系統提供的設備文件控制相關硬件。 本章的示例代碼目錄為:base_code/linux_app/led/sys_class_leds。 9.1. LED子系統 在Linux系統中,絕大多數硬件設備都有…

SpringBoot學習(上) , SpringBoot項目的創建(IDEA2024版本)

目錄 1. SpringBoot介紹 SpringBoot特點 2. SpringBoot入門 2.1 創建SpringBoot項目 Spring Initialize 第一步: 選擇創建項目 第二步: 選擇起步依賴 第三步: 查看啟動類 2.2 springboot父項目 2.3 測試案例 2.3.1 數據庫 2.3.2 生成代碼 1. SpringBoot介紹 Spring B…

在 Ubuntu 中配置 Samba 實現「特定用戶可寫,其他用戶只讀」的共享目錄

需求目標 所有認證用戶可訪問 Samba 共享目錄 /path/to/home;**僅特定用戶(如 developer)**擁有寫權限;其他用戶僅允許讀取;禁止匿名訪問。 配置步驟 1. 設置文件系統權限 將目錄 /home3/guest 的所有權設為 develo…

ENSP-OSPF綜合實驗

AR4中通過ospf獲取的其他區域路由信息,并且通過路由匯總后簡化路由信息 實現全網通,以及單向重發布,以及通過缺省雙向訪問, 通過stub簡化過濾四類五類lsa,簡化ospf路由信息 通過nssa簡化ospf信息 區域匯總簡化R4路由信…

linux(centos)聯網情況下部署

nginx部署 1.linux(centos)聯網情況下部署 1.下載nginx所需依賴 # 安裝開發工具組(若未安裝) sudo yum groupinstall "Development Tools"# 安裝 OpenSSL 開發包 sudo yum install openssl-devel# 安裝 PCRE 開發包 sudo yum install pcre-…

LeetCode 1550.存在連續三個奇數的數組:遍歷

【LetMeFly】1550.存在連續三個奇數的數組:遍歷 力扣題目鏈接:https://leetcode.cn/problems/three-consecutive-odds/ 給你一個整數數組 arr,請你判斷數組中是否存在連續三個元素都是奇數的情況:如果存在,請返回 tr…

Android Framework學習四:init進程實現

文章目錄 init流程簡介init源碼執行順序執行順序 init進程的具體工作事項掛載文件系統設置 SELinuxSecondStageMaininit.rc啟動zygote和serviceManager進程的重要性serviceManager工作原理 Framework學習之系列文章 init流程簡介 下面圖片主要圍繞 Android 系統中init進程的運…

HTTP/3展望、我應該遷移到HTTP/2嗎

1. HTTP/3展望 HTTP/3 基于 QUIC 協議,完全解決了“隊頭阻塞”問題,弱網環境下的表現會優于 HTTP/2;QUIC 是一個新的傳輸層協議,建立在 UDP 之上,實現了可靠傳輸;QUIC 內含了 TLS1.3,只能加密通…

【大模型面試每日一題】Day 15:流水線并行的Bubble問題及其緩解方法

【大模型面試每日一題】Day 15:流水線并行的Bubble問題及其緩解方法 📌 題目重現 🌟🌟 面試官:解釋流水線并行(Pipeline Parallelism)的bubble問題及其緩解方法。 #mermaid-svg-Uz7WGsO8akW5F…

Windows環境下maven的安裝與配置

1.檢查JAVA_HOME環境變量 Maven是使用java開發的,所以必須知道當前系統環境中的JDK的安裝目錄。 搜索欄直接輸入“cmd” 或者 WinR 輸入cmd 在打開的終端窗口輸入“echo %JAVA_HOME”,就可以看到jdk的位置了。 如果沒有的話,請參考我的文章&a…

Kubernetes 集群部署應用

部署 Nginx 應用 命令行的方式 1. 創建 deployment 控制器的 pod # --imagenginx:這個會從 docker.io 中拉取,這個網站拉不下來 # kubectl create deployment mynginx --imagenginx# 使用國內鏡像源拉取 kubectl create deployment mynginx --imaged…

如何使用依賴注入來實現依賴倒置原則?

依賴注入(Dependency Injection, DI)是實現依賴倒置原則(DIP)的具體技術手段,它通過將依賴對象的創建和管理交給外部容器,從而實現高層模塊與低層模塊的解耦。下面從原理、實現方式、框架應用及最佳實踐四個方面詳細解析: 一、依賴倒置原則(DIP)的核心思想 高層模塊不…

python使用AES進行加密和解密

如果需要加密和解密功能,可以使用AES算法。以下是使用Python實現AES加密和解密的示例: from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad from Crypto.Random import get_random_bytesdef aes_encrypt(data,

SaaS場快訂首頁的前端搭建【持續更新】

文章目錄 一、創建頁面二、配置路由三、寫接口文件(api)1.定位的接口函數(騰訊地圖api)實現代碼: 2.獲取場館分類的數據3.獲取附近場館列表的數據 四、開發首頁頁面1.頂部區域2.搜索框3.場館分類4.附近場館列表 五、難…

深入解析 MQTT 協議:物聯網通信的基石

在當今物聯網蓬勃發展的時代,設備之間高效、可靠的通信變得至關重要。MQTT(Message Queuing Telemetry Transport)協議,作為一種輕量級的消息傳輸協議,正逐漸成為物聯網通信的基石,廣泛應用于各種場景中。 …

在Python中計算函數耗時并超時自動退出

更多內容請見: python3案例和總結-專欄介紹和目錄 文章目錄 方法1:使用裝飾器結合信號模塊(僅Unix-like系統)方法2:使用多線程(跨平臺解決方案)方法3:使用concurrent.futures(Python 3.2+)方法4:使用 multiprocessing + Process(跨平臺)?方法5:使用 time 手動計…