es 中 terms set 使用

在 Elasticsearch 中,terms_set 查詢通常用于在一個字段上進行多值匹配,并支持設置一個條件(例如最小匹配數量),讓查詢結果更具靈活性。為了展示如何使用 terms_set 查詢,我們首先會創建一個索引,寫入一些數據,然后演示如何進行查詢。

1. 創建索引和寫入數據

首先,假設我們有一個關于 articles(文章)的索引,每個文檔包含字段 tags(標簽),我們希望查詢文檔中的標簽是否包含給定的多個值。

創建索引

假設我們的索引名為 articles,并且每個文檔包含字段 tags(多個標簽值)。

PUT /articles
{"mappings": {"properties": {"title": { "type": "text" },"tags": { "type": "keyword" }}}
}

在上述示例中,我們定義了一個名為 articles 的索引,其中 tags 字段是 keyword 類型,因為我們想要存儲和查詢標簽。

寫入數據

接下來,我們寫入一些數據。每個文檔包含文章標題和相關的標簽。

POST /articles/_bulk
{ "index": { "_id": 1 } }
{ "title": "Tech News Today", "tags": ["tech", "news", "AI"] }
{ "index": { "_id": 2 } }
{ "title": "Sports Highlights", "tags": ["sports", "news", "football"] }
{ "index": { "_id": 3 } }
{ "title": "Latest in AI", "tags": ["tech", "aAI"] }
{ "index": { "_id": 4 } }
{ "title": "Football Updates", "tags": ["sports", "football"] }
{ "index": { "_id": 5 } }
{ "title": "Tech Innovations", "tags": ["tech", "innovation"] }

在這個例子中,我們為不同的文章指定了多個標簽,如 techsportsnewsAI 等。

2. 使用 terms_set 查詢

現在,我們將使用 terms_set 查詢來查找至少匹配給定標簽集的文檔。比如,我們希望找到那些標簽字段中至少包含 technewsAI 中的兩個標簽的文檔。

查詢示例
POST /articles/_search
{"query": {"terms_set": {"tags": {"terms": ["tech", "news", "AI"],"minimum_should_match_script": {"source": "Math.min(params.num_terms, 2)"}}}}
}
解釋:
  • terms_set: 查詢的目標字段是 tags
  • terms: 這里列出的是我們要匹配的標簽集合:["tech", "news", "AI"]
  • minimum_should_match_script: 使用腳本來設置條件,要求文檔的 tags 字段至少包含集合中的兩個標簽。Math.min(params.num_terms, 2) 的意思是,“返回包含至少兩個標簽的文檔”。

3. 查詢結果

假設查詢成功執行,以下是結果:

{"took" : 13,"timed_out" : false,"_shards" : {"total" : 1,"successful" : 1,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 3.810946,"hits" : [{"_index" : "articles","_type" : "_doc","_id" : "1","_score" : 3.810946,"_source" : {"title" : "Tech News Today","tags" : ["tech","news","AI"]}}]}
}

在這個結果中,符合查詢條件的文檔是:

  • 文檔 1tags 包含 technewsAI,至少包含兩個標簽。
  • 文檔 3tags 包含 techAI,至少包含兩個標簽。

5. 總結

  • terms_set 查詢在處理多值字段時非常有用,特別是當你希望在一個字段中匹配多個值,并且可以靈活控制匹配條件時。
  • terms 參數用于指定查詢的多個值,minimum_should_match_script 則用于自定義最小匹配數量。
  • 這種查詢方法非常適合需要對多值條件進行動態調整的情況,比如在推薦系統或復雜篩選條件下使用。

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

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

相關文章

修改采購訂單BAPI學習研究-BAPI_PO_CHANGE

這里是修改采購訂單BAPI,修改訂單數量和交貨日期的簡單應用 文章目錄 修改數量代碼運行結果 修改交貨日期代碼運行結果 修改數量 代碼 *&---------------------------------------------------------------------* *& Report Z_BAPI_PO_CHANGE *&----…

WSL2高級配置之mirrored鏡像網絡

WSL2高級配置之mirrored鏡像網絡 引言版本要求更改配置 引言 WSL2默認的網絡模式為NAT。盡管WSL2原生提供了localhost轉發這種能夠方便地在Windows中訪問子系統服務的特性,但如果想反過來,則只能通過局域網或者想辦法橋接,這兩種方法都有些許…

《ROS2 機器人開發 從入門道實踐》 魚香ROS2——第4章內容

第4章 服務和參數——深入ROS2通信 4.2 用Python服務通信實現人臉檢測 4.2.1 自定義服務接口 1. 創建接口功能包 終端中輸入 ros2 pkg create chapt4_interfaces --dependencies sensor_msgs rosidl_default_generators --license Apache-2.0 ros2 pkg create 功能包名稱…

Linux系統編程深度解析:C語言實戰指南

文章一覽 前言一、gcc編譯系統1.1 文件名后綴1.2 C語言編譯過程1.3 gcc命令行選項 二、gdb程序調試工具2.1 啟動gdb和查看內部命令2.2 顯示源程序和數據2.2.1 顯示和搜索源程序2.2.2 查看運行時數據 2.3 改變和顯示目錄或路徑2.4 控制程序的執行2.4.1 設置斷點2.4.2 顯示斷點2.…

SQL優化原理與具體實例分析

一、引言 SQL(Structured Query Language,結構化查詢語言)是關系型數據庫的核心語言。在實際應用中,數據庫查詢性能往往成為系統性能瓶頸。因此,掌握SQL優化技巧對于提高數據庫查詢效率具有重要意義。本文將圍繞SQL優…

安卓藍牙掃描流程

目錄 系統廣播 流程圖 源碼跟蹤 系統廣播 掃描開啟廣播:BluetoothAdapter.ACTION_DISCOVERY_STARTED "android.bluetooth.adapter.action.DISCOVERY_STARTED";掃描關閉廣播:BluetoothAdapter.ACTION_DISCOVERY_FINISHED "android.b…

shell 編程(三)

條件測試命令 條件測試:判斷某需求是否滿足,需要有測試機制來實現 專用的測試表達式需要由測試命令輔助完成測試過程,評估布爾生命,以便用在條件性執行中 若真,則狀態碼變量$? 返回0 // echo $? 打印0 反之返回1 t…

八股(One Day one)

最近老是看到一些面試的視頻,對于視頻內部面試所提到的八股文,感覺是知道是什么,但是要說的話,卻又不知道該怎么說(要不咋稱之為八股文呢),所以就想到寫一篇八股文總結的博客,以便進…

Rust 在前端基建中的使用

摘要 隨著前端技術的不斷發展,前端基礎設施(前端基建)的建設已成為提升開發效率、保障產品質量的關鍵環節。然而,在應對復雜業務場景與高性能需求時,傳統的前端技術棧逐漸暴露出諸多不足。近年來,Rust語言…

豆包MarsCode:a替換函數

問題描述 思路分析 在這個問題中,我們的目標是將字符串中的所有小寫字母 a 替換為 "%100"。為了實現這一點,我們需要分析問題的核心需求和合理的解決方案。以下是分析和思路的詳細步驟: 1. 理解問題 給定一個字符串 s&#xff0…

人臉生成3d模型 Era3D

從單視圖圖像進行3D重建是計算機視覺和圖形學中的一項基本任務,因為它在游戲設計、虛擬現實和機器人技術中具有潛在的應用價值。早期的研究主要依賴于直接在體素上進行3D回歸,這往往會導致過于平滑的結果,并且由于3D訓練數據的限制&#xff0…

【點估計】之Python實現

點估計是一種統計推斷方法,它利用樣本數據來估計總體的未知參數。在概率論和數理統計的框架下,點估計將總體的未知參數視為一個確定的值或一個具體的點,并試圖通過樣本數據來找到這個值的最佳估計。以下是對點估計的詳細解釋: 一、定義與原理 定義:點估計是根據樣本數據估…

rust與python互通

互通三件套 rust側與python互通的三個庫: pyo3 pythonize serde pyo3 pyo3跟用Python C API寫python擴展有點類似,核心是: #[pymodule] #[pyfunction]兩個注解。前者對應Py_InitModule,后者對應PyMethodDef。 下面是其它博…

Ubuntu系統下 npm install -g tauri 報錯問題處理

處理在安裝 Tauri 時遇到的問題,可以按照以下步驟進行操作 npm install -g taurinpm warn deprecated inflight1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async …

信貸域——互聯網金融理論基礎

摘要 互聯網金融這種新興的金融業態近幾年飛速發展,規模不斷擴大,互聯網金融在對我國金融體系和經濟發展影響中所占的分量越來越重,一定程度上也推動了互聯網金融理論的發展。 互聯網金融與傳統金融都是金融,有著相近的理論基礎。…

C++軟件設計模式之享元模式(FlyWeight)

享元(Flyweight)模式的動機與意圖 動機 享元模式的主要動機是通過共享對象來減少內存使用,從而提高系統的性能。在某些情況下,系統中可能有大量細粒度的對象,這些對象具有共同的部分狀態,而這些狀態可以共…

LightGBM分類算法在醫療數據挖掘中的深度探索與應用創新(上)

一、引言 1.1 醫療數據挖掘的重要性與挑戰 在當今數字化醫療時代,醫療數據呈爆炸式增長,這些數據蘊含著豐富的信息,對醫療決策具有極為重要的意義。通過對醫療數據的深入挖掘,可以發現潛在的疾病模式、治療效果關聯以及患者的健康風險因素,從而為精準醫療、個性化治療方…

|-牛式-|

題目描述 下面是一個乘法豎式,如果用我們給定的那幾個數字來取代 * ,可以使式子成立的話,我們就叫這個式子牛式。 * * * x * * ------- * * * * * * ------- * * * * 數字只能取代 * ,當然第一位不能為 0 。 寫一個程序找…

es 3期 第18節-分頁查詢使用避坑的一些事

#### 1.Elasticsearch是數據庫,不是普通的Java應用程序,傳統數據庫需要的硬件資源同樣需要,提升性能最有效的就是升級硬件。 #### 2.Elasticsearch是文檔型數據庫,不是關系型數據庫,不具備嚴格的ACID事務特性&#xff…

STM32串口第一次接收數據時第一個字節丟失的問題

解決方法:開啟中斷之前,先清除標志位【1】。 串口清除標志位: __HAL_UART_CLEAR_PEFLAG(&huart1); HAL_UART_Receive_IT(&huart1,&RxUart, 1); 定時器清除標志位: __HAL_TIM_CLEAR_FLAG(&htim3,TIM_FLAG_UPDATE);…