elasticsearch 弹性搜索2.1:聚合的交集,elasticsearch,aggregate,elasticsearch,Aggregate" /> elasticsearch 弹性搜索2.1:聚合的交集,elasticsearch,aggregate,elasticsearch,Aggregate" />

elasticsearch 弹性搜索2.1:聚合的交集

elasticsearch 弹性搜索2.1:聚合的交集,elasticsearch,aggregate,elasticsearch,Aggregate,我在弹性搜索中有一些示例数据,如下所示 Data1: { "name": "rahul", "socialnetwork": "facebook", "day":1 }Data2: { "name": "rahul", "searchengine": "google" "day": 1 }Data3: { "name": "vivek", "socialnetwork": "facebook", "day":1 }Data

我在弹性搜索中有一些示例数据,如下所示

Data1: {
    "name": "rahul",
    "socialnetwork": "facebook",
    "day":1

}Data2: {
    "name": "rahul",
    "searchengine": "google"
    "day": 1
}Data3: {
    "name": "vivek",
    "socialnetwork": "facebook",
    "day":1
}Data4: {
    "name": "devendra",
    "searchengine": "google",
    "day":2
}Data5: {
    "name": "rahul",
    "socialnetwork": "facebook",
    "day":2

}
我需要在名称字段上获得聚合,其中socialnetwork=facebook和searchengine=google

据我所知,我们可以使用两个聚合并得到聚合的交集

第一次汇总:

第二次汇总:

并获取公共聚合,即两个聚合的交集

但我无法使用弹性搜索获得交叉点。 我尝试过很多事情:在这种情况下,子聚合没有帮助,重要术语聚合结果不够好,过滤器,管道聚合,但找不到解决方案


上面的示例数据只是大数据的简化版本,有两个以上的过滤器,大约20个过滤器。

不,不需要两个聚合的交集。 使用bool查询可以轻松实现上述功能。对于所需的输出,可以使用shoul子句


希望有帮助。

不,您不需要两个聚合的交集。 使用bool查询可以轻松实现上述功能。对于所需的输出,可以使用shoul子句


希望有帮助。

bool query在这里不起作用,必须将两个搜索标准强制放在同一个文档中。但一个条件在一个文档中,另一个条件在另一个文档中。因此,上面的查询不会给出任何结果。您可以为相同的查询指定所需的输出或相应的sql查询吗?所需的输出是一个名称列表,其中searchengine=google,socialnetwork=facebook。使用sql,必须使用内部“连接”:从表1中选择名称n1,搜索引擎se,其中searchengine=google可设置内部连接选择名称n2,从表1中选择社交网络sn,其中socialnetwork=facebook sntable on setable.n1=sntable.n2根据您提供的上述数据,是否需要以下结果:bucket:[{key:rahul,doc_count:2},{key:devendra,doc_count:1},{key:vivek,doc_count:1}]是的,最终聚合应该只包含两个查询共用的名称布尔查询在这里不起作用,必须强制两个搜索条件位于同一文档中。但是一个条件位于一个文档中,而另一个条件位于另一个文档中。因此,上述查询不会给出任何结果。请指定所需的输出或对应值相同的sql查询?所需的输出是一个名称列表,其中searchengine=google和socialnetwork=facebook。使用sql时,必须使用内部“连接”:从表1中选择名称n1,搜索引擎se,其中searchengine=google可设置的内部连接选择名称n2,从表1中选择socialnetwork sn,其中socialnetwork=facebook SNS上的sntableetable.n1=sntable.n2根据您提供的上述数据,是否希望得到以下结果:bucket:[{key:rahul,doc_count:2},{key:devendra,doc_count:1},{key:vivek,doc_count:1}]是的,最终聚合应该只包含两个查询共用的名称
    {
    "query": {
        "match": {
            "searchengine": "google"
        }
    },
    "aggs": {
        "searcheng": {
            "terms": {
                "field": "name"
            }
        }
    }
}
    {
    "query": {
        "match": {
            "socialnetwork": "facebook"
        }
    },
    "aggs": {
        "socialnet": {
            "terms": {
                "field": "name"
            }
        }
    }
}
{
"query": {
  "bool": {
     "should": [
        {
           "match": {
              "searchengine": "google"
           }
        },
        {
           "match": {
              "socialnetwork": "facebook"
           }
        }
     ],
     "minimum_number_should_match": 1
    }
   },
  "aggs": {
  "searcheng": {
     "terms": {
        "field": "name",
        "min_doc_count" :2
     }
   }
  }
 }