Elasticsearch - 不同计数

Elasticsearch - Count distinct

我有一个带日志的基本索引

部分日志是user1对user2的访问

我设法计算了一个用户收到的访问总数,但我不知道如何计算一个用户收到的不同用户的总数

这是给我一个用户的所有日志

{
    "post_filter":{
        "bool":{
            "must":[
                {
                    "term":{
                        "message":"visit"
                    }
                },
                {
                    "term":{
                        "ctxt_user2":"733264"
                    }
                }
            ]
        }
    },
    "query":{
        "match_all":{}
    }
}

实际上,我正在为 Symfony2 使用 FoSElasticaBundle

$filter->addMust((new Term())->setTerm('message', 'visit'));
$filter->addMust((new Term())->setTerm('ctxt_user2', $this->search->getVisit()));

我用聚合器阅读了 ES 文档中的一些页面,但我从未设法得到我想要的东西

转换为SQL,我只需要

SELECT COUNT(DISCTING ctxt_user1)
FROM logs
WHERE ctxt_user2 = 733264

编辑:

基数接缝正是我所需要的。 现在只需要了解如何将其与 FosElasticaBundle

一起使用
"aggs": {
    "yourdistinctcount": {
        "cardinality": {
            "field": "ctxt_user1"
        }
    }
}

尝试这个查询(未测试...):

{
"query" : {
 "bool":{
         "must":[
             {
                 "term":{
                     "message":"visit"
                }
            },
            {
                "term":{
                    "ctxt_user2":"733264"
                }
            }
        ]
    }
},
"aggs": {
  "yourdistinctcount": {
    "terms": {
      "field": "ctxt_user1"
     }
   }
 }
}

post_filter 查询不能用于您的情况。正如它在 Elastic.co 网站上所写:post_filter 应用于搜索请求最后的搜索命中,在已经计算聚合之后。`

HtH,