要点:
我对我的博客使用elasticsearch。我想问一个问题:在一个会话中有多少客户请求了页面A和页面B?
详细信息:
我的Elasticsearch节点包含我网站上记录的事件。每个事件都包含timestamp,url,referrer和session id。此刻我知道如何找到,例如请求url xyz的会话数。但我不知道如何在会话中同时请求页面A和页面B的情况。当然,页面A或B不是推荐人的一部分。 这是在弹性搜索中以某种方式支持的吗?
答案 0 :(得分:0)
查询应如下所示(假设您的url
和session_id
为not_analyzed
):
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"url": "[Page A URL]"
}
},
{
"term": {
"url": "[Page B URL]"
}
}
]
}
}
}
},
"aggs": {
"requested_both_pages": {
"terms": {
"field": "session_id"
}
}
}
}
回复中的doc_count
将是您要查找的号码。
请注意,如果您的网址已经过分析,并且您需要进行模糊匹配,那么您必须使用match
查询而不是terms
过滤器。我一般不会推荐分析推荐人。相反,我会将其分解为部分,并使用每个字符串not_analyzed
创建一个嵌套的url对象,然后使用terms
过滤器。如果您需要一些模糊性,您仍可以使用not_analyzed
字段进行wildcard query。
答案 1 :(得分:0)
我发现了一个查询,该查询至少返回每个会话请求网址A和网址B的次数。我不知道我可以使用这种聚合方式。仍然不是完美的解决方案,因为它可以返回url A有计数和url B没有计数的会话。所以我不会将anwser标记为已解决。除非有专家告诉我,我的要求根本不可能。
{
"query": {
"filtered": {
"filter": {
"bool": {
"should": [
{
"term": {
"Url": "[Page A URL]"
}
},
{
"term": {
"Url": "[Page B URL]"
}
}
]
}
}
}
},
"aggs": {
"sessions_all": {
"terms": {
"field": "session_id",
"size": 100
},
"aggs": {
"Page_A_URL": {
"filter": {
"term": {
"Url": "[Page A URL]"
}
}
},
"Page_B_URL": {
"filter": {
"term": {
"Url": "[Page A URL]"
}
}
}
}
}
}
}