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

最近公司有一个需求:求标签之间的交集、并集,但不允许使用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": {
    
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Elasticsearch 中,聚合操作是一种非常强大的数据分析工具,可以从数据中提有意义的信息,帮助我们更好地了解数据。下面是一个简单的例子,演示如何使用聚合操作并显示其他字段。 假设你有一个存储了用户行为数据的索引,其中包含了用户的 ID、行为类型、行为时间等字段。现在,你想要对这些数据进行聚合分析,以了解不同用户的行为模式和时间分布情况,并在结果中显示用户的 ID。 以下是一个示例查询: ``` GET user_behavior/_search { "size": 0, "aggs": { "user_count": { "cardinality": { "field": "user_id" } }, "behavior_type": { "terms": { "field": "behavior_type" }, "aggs": { "time_distribution": { "date_histogram": { "field": "behavior_time", "interval": "day" } } } } } } ``` 这个查询使用了两个聚合操作: 1. `cardinality` 聚合操作统计了不同用户的数量,即用户总数。 2. `terms` 聚合操作按照行为类型进行分组,并在每个分组中使用 `date_histogram` 对行为时间进行分组,并且设置了按天进行时间间隔分组。 这个查询将返回一个包含聚合结果的响应体,其中包括了用户总数和每个行为类型的时间分布情况。此外,还可以看到每个行为类型的结果中包含了用户的 ID 字段。 需要注意的是,如果想要在聚合结果中显示其他字段,需要在聚合操作中添加该字段。例如,在上面的查询中,如果你还想要显示用户的姓名字段,需要将其添加到 `terms` 聚合操作中。 希望这个例子能够帮助你更好地理解 Elasticsearch 中的聚合操作,并且能够借此了解如何在聚合结果中显示其他字段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值