我有一个带日志的基本索引
某些日志是user1访问user2
我设法计算了用户收到的访问次数,但我不知道用户收到的不同用户总数的计算方式
这为我提供了用户的所有日志
{
"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"
}
}
}
答案 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,