Elasticsearch - 数量不同

时间:2016-09-07 14:50:44

标签: symfony elasticsearch foselasticabundle

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

某些日志是user1访问user2

我设法计算了用户收到的访问次数,但我不知道用户收到的不同用户总数的计算方式enter image description here

这为我提供了用户的所有日志

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

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

$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"
        }
    }
}

1 个答案:

答案 0 :(得分:0)

尝试此查询(未测试...):

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

在您的情况下无法使用post_filter查询。在Elastic.co网站上写道:在已经计算出聚合之后,post_filter将应用于搜索请求最后的搜索匹配。

HTH,