Elasticsearch需求:使用聚合分析求标签之间的交集、并集与差集

本文介绍了如何在Elasticsearch中利用聚合分析来求解标签的交集、并集,而不使用query语句。通过filter过滤器和分桶聚合,实现了在Java API(JestClient)中对标签数据的处理。目前完成了交集部分,通过嵌套过滤器和递归方法,得到了同时包含多个指定标签的文档。并集部分则相对简单,计划后续完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司有一个需求:求标签之间的交集、并集,但不允许使用query语句,必须使用聚合分析。
这要求真的有点男,一瞬间不知道怎么整。后来使用聚合中的filter对元素进行过滤,通过求子集的方式求出交集.

1.求出交集
这里我们先看一下我设置索引的mapping

	{
	  "test" : {
	    "mappings" : {
	      "properties" : {
	        "Num" : {
	          "type" : "integer"
	        },
	        "tags" : {
	          "type" : "text",
	          "analyzer" : "whitespace",
	          "fielddata" : true
	        }
	      }
	    }
	  }
}

这里的话可以看到,设计的存储标签使用的索引结构是编号由Num和标签tags组成。标签使用的是空格分词。
索引里面已经被我存放入了一些数据,这里不再作存入数据代码的编写。直接进入聚合分析模块。

GET test/_search
{
  "aggs": {
    "filter1": {
      "filter": {
        "term": {
          "tags": "T001"
        }
      },
      "aggs": {
        "filter2": {
          "filter": {
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值