当前位置: 首页 > news >正文

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.lryc.cn/news/508763.html

相关文章:

  • 绩效考核试题
  • 停车管理系统:构建安全、便捷的停车环境
  • 十四、从0开始卷出一个新项目之瑞萨RZN2L之栈回溯(Default_Handler/hartfault)
  • 联通光猫怎么自己改桥接模式?
  • 突围边缘:OpenAI开源实时嵌入式API,AI触角延伸至微观世界
  • springBoot Maven 剔除无用的jar引用
  • malloc 分配大堆块(128KB)的一次探索
  • Android -- 双屏异显之方法二
  • 电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?
  • 使用RDMA技术构建无损网络
  • vscode 识别git目录
  • OpenCV相机标定与3D重建(26)计算两个二维点集之间的部分仿射变换矩阵(2x3)函数 estimateAffinePartial2D()的使用
  • StarRocks 生产部署一套集群,存储空间如何规划?
  • JVM执行引擎JIT深度剖析
  • 【DOCKER】基于DOCKER的服务之DUFS
  • 加密货币地址的基本概念
  • 如何在 Linux 服务器上部署 Pydio Cells 教程
  • Halcon例程代码解读:安全环检测(附源码|图像下载链接)
  • Selenium 全面指南
  • #error: WinSock.h has already been included解决方案
  • 2.Couchbase 的增量查询优化
  • 汽车IVI中控开发入门及进阶(46):FFmpeg
  • Spring Boot 中的 @Scheduled 定时任务以及开关控制
  • 服务器证书原理
  • 重温设计模式--代理、中介者、适配器模式的异同
  • 2024第十六届蓝桥杯模拟赛(第二期)-Python
  • 分布式系统中的防抖策略一致性与性能优化
  • 项目代码第6讲:UpdownController.cs;理解 工艺/工序 流程、机台信息;前端的“历史 警报/工艺 记录”
  • 【计算机视觉基础CV-图像分类】03-深度学习图像分类实战:鲜花数据集加载与预处理详解
  • 大模型应用技术系列(一):大模型应用整体技术栈浅析