最近公司有一个需求:求标签之间的交集、并集,但不允许使用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": {