es 中 terms set 使用

在 Elasticsearch 中,terms_set 查询通常用于在一个字段上进行多值匹配,并支持设置一个条件(例如最小匹配数量),让查询结果更具灵活性。为了展示如何使用 terms_set 查询,我们首先会创建一个索引,写入一些数据,然后演示如何进行查询。

1. 创建索引和写入数据

首先,假设我们有一个关于 articles(文章)的索引,每个文档包含字段 tags(标签),我们希望查询文档中的标签是否包含给定的多个值。

创建索引

假设我们的索引名为 articles,并且每个文档包含字段 tags(多个标签值)。

json 复制代码
PUT /articles
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "tags": { "type": "keyword" }
    }
  }
}

在上述示例中,我们定义了一个名为 articles 的索引,其中 tags 字段是 keyword 类型,因为我们想要存储和查询标签。

写入数据

接下来,我们写入一些数据。每个文档包含文章标题和相关的标签。

json 复制代码
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 中的两个标签的文档。

查询示例
json 复制代码
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. 查询结果

假设查询成功执行,以下是结果:

json 复制代码
{
  "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 则用于自定义最小匹配数量。
  • 这种查询方法非常适合需要对多值条件进行动态调整的情况,比如在推荐系统或复杂筛选条件下使用。
相关推荐
小麦矩阵系统永久免费38 分钟前
短视频矩阵系统哪个好用?2025最新评测与推荐|小麦矩阵系统
大数据·人工智能·矩阵
贝多芬也爱敲代码9 小时前
如何减小ES和mysql的同步时间差
大数据·mysql·elasticsearch
异次元的星星10 小时前
智慧新零售时代:施易德系统平衡技术与人力,赋能门店运营
大数据·零售
深思慎考11 小时前
ElasticSearch与Kibana 入门指南(7.x版本)
大数据·elasticsearch·jenkins
银行数字化转型导师坚鹏11 小时前
如何设计优秀的企业微信私域运营实战培训方案
大数据·python·企业微信
悠闲蜗牛�12 小时前
人工智能时代下的全栈开发:整合AI、大数据与云原生的实践策略
大数据·人工智能·云原生
ml魔力信息13 小时前
活体检测与防伪技术的安全与隐私分析
大数据·人工智能·安全·隐私保护·生物识别·活体检测
数据要素X14 小时前
寻梦数据空间 | 架构篇:从概念到落地的技术实践与突破性创新
大数据·运维·数据仓库·微服务·数据治理·数据中台·可信数据空间
IT学长编程16 小时前
计算机毕业设计 基于EChants的海洋气象数据可视化平台设计与实现 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
大数据·hadoop·python·毕业设计·课程设计·毕业论文·海洋气象数据可视化平台
呆呆小金人16 小时前
SQL入门: HAVING用法全解析
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师