探索 Elasticsearch 8.X Terms Set 檢索的應用與原理
來源:銘毅天下Elasticsearch
1、Terms Set 檢索簡介
Terms Set查詢是Elasticsearch中一種強大的查詢型別,主要用於處理多值欄位中的文件匹配。
其核心功能在於,它可以檢索至少匹配一定數量給定詞項的文件,其中匹配的數量可以是固定值,也可以是基於另一個欄位的動態值。這種查詢方式在處理具有多個屬性、分類或標籤的複雜資料時非常有用。
2、Terms Set 檢索產生背景
Terms Set查詢是Elasticsearch 6.1版本中引入的新功能。在6.1版本之前,Elasticsearch提供了多種查詢型別,但在處理多值欄位時,使用者可能需要編寫更復雜的查詢或使用指令碼來實現特定的匹配條件。
引入Terms Set查詢的主要目的是為了簡化這類場景下的查詢處理。使用Terms Set查詢,使用者可以輕鬆地找到至少匹配一定數量給定詞項的文件,同時支援基於其他欄位或指令碼動態計算匹配數量。這種查詢方式在處理具有多個屬性、分類或標籤的複雜資料時非常有用。
3、Terms Set 檢索應用場景
Terms Set查詢在處理多值欄位和特定匹配條件時非常有用。
以下是一些常見的應用場景:
標籤系統
在具有標籤系統的應用中,如部落格、社交媒體或新聞網站,使用者可能會為內容(如文章、帖子或產品)分配多個標籤。使用Terms Set查詢,可以找到至少具有一定數量給定標籤的內容。這對於篩選和推薦功能非常有用。
搜尋引擎
在搜尋引擎中,使用者可能會輸入多個關鍵詞來查詢相關內容。使用Terms Set查詢,可以根據文件與給定關鍵詞的匹配程度對結果進行排序。例如,可以找到至少匹配使用者輸入關鍵詞一半數量的文件。
電子商務
在電子商務應用中,產品可能具有多個屬性,如顏色、尺寸或品牌。使用Terms Set查詢,可以找到同時滿足多個屬性條件的產品。例如,可以找到至少具有2個指定顏色和3個指定尺寸的產品。
文件管理系統
在文件管理系統中,文件可能具有多個分類或標籤。使用Terms Set查詢,可以根據文件的分類或標籤匹配程度進行篩選。例如,可以找到與給定分類或標籤至少匹配一定數量的文件。
技能匹配
在招聘或求職應用中,候選人可能具有多個技能。使用Terms Set查詢,可以找到至少具有一定數量給定技能的候選人。這對於篩選和推薦合適的候選人非常有用。總之,Terms Set查詢在處理具有多個屬性、分類或標籤的複雜資料時非常有用。透過靈活地設定匹配數量條件,可以輕鬆地找到滿足特定要求的文件。
4、Terms Set 檢索的工作原理
Terms Set查詢的基本語法如下:
{
"query": {
"terms_set": {
"<欄位名>": {
"terms": ["<詞項1>", "<詞項2>", ...],
"minimum_should_match_field": "<匹配數量欄位名>",
"minimum_should_match_script": {
"source": "<指令碼>"
}
}
}
}
}
Terms Set查詢的工作原理可以分為以下幾個步驟:
指定要查詢的欄位名,這個欄位通常是一個多值欄位,如陣列或集合。 提供一組詞項,用於在指定欄位中進行匹配。 設定匹配數量的條件,可以有兩種方式(二者不可兼得,只能選擇其中一個): 透過 minimum_should_match_field 引數指定一個包含匹配數量的欄位名。 使用 minimum_should_match_script 引數提供一個指令碼,該指令碼可以動態計算匹配數量。 Elasticsearch會檢索匹配給定詞項數量要求的文件,並將它們作為查詢結果返回。
5、Terms Set 檢索應用示例
假設我們有一個電影資料庫,每部電影都有多個標籤。現在,我們希望找到同時具有一定數量給定標籤的電影。
以下是一個使用Terms Set查詢的例子:
5.1 資料準備
首先,建立一個名為movies的索引:
PUT movies
{
"mappings": {
"properties": {
"title": {
"type": "text"
},
"tags": {
"type": "keyword"
},
"tags_count": {
"type": "integer"
}
}
}
}
然後,向索引中新增一些電影資料:
POST /movies/_bulk
{"index":{"_id":1}}
{"title":"電影1","tags":["喜劇","動作","科幻"],"tags_count":3}
{"index":{"_id":2}}
{"title":"電影2","tags":["喜劇","愛情","家庭"],"tags_count":3}
{"index":{"_id":3}}
{"title":"電影3","tags":["動作","科幻","喜劇"],"tags_count":3}
5.2 使用Terms Set 檢索電影
現在,我們希望找到至少具有2個給定標籤("喜劇"、"動作"和"科幻")的電影。我們可以使用Terms Set查詢來實現這個需求:
基於minimum_should_match_field 檢索
GET /movies/_search
{
"query": {
"terms_set": {
"tags": {
"terms": ["喜劇", "動作", "科幻"],
"minimum_should_match_field": "tags_count"
}
}
}
}
上述程式碼使用 terms_set 查詢,在名為 movies 的索引中檢索滿足動態匹配數量要求的電影,匹配數量由 tags_count 欄位決定,查詢標籤包括"喜劇"、"動作"和"科幻"。返回結果如下,文件1被召回。
再看如下的檢索。
基於minimum_should_match_script 檢索
GET /movies/_search
{
"query": {
"terms_set": {
"tags": {
"terms": [
"喜劇",
"動作",
"科幻"
],
"minimum_should_match_script": {
"source": "doc['tags_count'].value * 0.7"
}
}
}
}
}
如上檢索從名為 movies 的索引中檢索至少匹配給定標籤("喜劇"、"動作"和"科幻")總數70%數量要求的電影,匹配數量由自定義指令碼doc['tags_count'].value * 0.7動態計算。“_id”為1和“_id”為3的兩個文件被召回。
6、小結
Terms Set查詢是Elasticsearch中一種非常強大的查詢方式,適用於處理具有多個屬性、分類或標籤的複雜資料。
透過靈活地設定匹配數量條件,我們可以輕鬆地找到滿足特定要求的文件。
然而,需要注意的是,使用Terms Set查詢時可能會遇到效能問題,特別是在處理大量資料時。為了提高查詢效能,可以考慮對資料進行預處理,例如使用聚類演算法將標籤分組,然後根據分組查詢文件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027827/viewspace-2950924/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Elasticsearch 8.X:這個複雜的檢索需求如何實現?Elasticsearch
- 基於ElasticSearch實現商品的全文檢索檢索Elasticsearch
- ElasticSearch進階檢索Elasticsearch
- ElasticSearch入門檢索Elasticsearch
- Elasticsearch加速檢索的Tips總結Elasticsearch
- elasticsearch bucket 之rare terms聚合Elasticsearch
- springboot ElasticSearch 簡單的全文檢索高亮Spring BootElasticsearch
- PWA的探索與應用
- [轉]23個最有用的Elasticsearch檢索技巧Elasticsearch
- 資料密集型應用儲存與檢索設計
- 從原理到應用,Elasticsearch詳解Elasticsearch
- ElasticSearch 實現分詞全文檢索 - 概述Elasticsearch分詞
- 10-入侵檢測技術原理與應用
- 與機器人索菲亞合作,iTutorGroup探索AI在教育場景的深度應用機器人AI
- 棧的原理與應用
- SSH 的原理與應用
- 用Elasticsearch做大規模資料的多欄位、多型別索引檢索Elasticsearch多型型別索引
- ElasticSearch 億級資料檢索案例實戰Elasticsearch
- Laravel 8.x 新建應用 使用 DockerLaravelDocker
- dubbo的SPI應用與原理
- ElasticSearch 實現分詞全文檢索 - delete-by-queryElasticsearch分詞delete
- influxdb 原理與應用UX
- 【IT老齊072】全文檢索執行原理
- 深入探索智慧問答:從檢索到生成的技術之旅
- Elasticsearch 8.X 如何生成 TB 級的測試資料 ?Elasticsearch
- 探索人工智慧與強化學習:從基礎原理到應用前景人工智慧強化學習
- 《探索Python Requests中的代理應用與實踐》Python
- 讀書筆記:從Lucene到Elasticsearch:全文檢索實戰筆記Elasticsearch
- 一種基於概率檢索模型的大資料專利檢索方法與流程模型大資料
- 益普索報告:檢驗與檢測的未來
- Elasticsearch 億級資料檢索效能最佳化案例實戰!Elasticsearch
- Elasticsearch 查詢結果分組統計,聚合檢索(group by stats)Elasticsearch
- 情感分析技術在美團的探索與應用
- Elasticsearch 8.X Rollup 功能詳解及避坑指南Elasticsearch
- elasticsearch的開發應用(3)Elasticsearch
- ES 21 - Elasticsearch的高階檢索語法 (包括term、prefix、wildcard、fuzzy、boost等)Elasticsearch
- vivo直播應用技術實踐與探索
- Elasticsearch深度應用(上)Elasticsearch