gpt4 book ai didi

elasticsearch - Elasticsearch -查找多个查询共有的数据

转载 作者:行者123 更新时间:2023-12-02 22:32:47 28 4
gpt4 key购买 nike

在Elastic Search中,我有一个索引,其中包含用户及其访问过的URL。我希望能够搜索多个用户并找到他们访问过的常见 URL。

我可以获取单个用户的网址:

{
"size": 0,
"query": {
"filtered": {
"query": {
"query_string": {
"query": "user:bob"
}
},
"filter": {
"bool": {
"must": [{
"range": {
"@timestamp": {
"gte": 1430456930549,
"lte": 1430666630549
}
}
}],
"must_not": []
}
}
}
},
"aggs": {
"1": {
"terms": {
"field": "url",
"size": 0,
"order": {
"_count": "desc"
}
}
}
}
}

但是,如何合并每个用户的结果(进行某种交叉)。我可以通过编程方式执行此操作,但是Elastic Search可以通过某种聚合来执行此操作吗?

最佳答案

您可以在用户条款内使用子聚合,网址中的条款:

{
"query": {
"match_all": {}
},
"aggs": {
"users": {
"terms": {
"field": "user"
},
"aggs": {
"urls": {
"terms": {
"field": "url"
}
}
}
}
}
}

这将为您提供用户桶,每个用户都包含URL桶。

UPD 我起初误解了您的问题。我不知道您要搜索的这种聚合类型。但是,您可以利用 significant terms aggregation:
{
"query": {
"filtered": {
"filter": {
"terms": {
"user": ["alice", "jack"]
}
}
}
},
"aggs": {
"urls": {
"significant_terms": {
"field": "url",
"size": 5
}
}
}
}

这将为您提供给定用户集中最流行的URL的存储桶。请注意,在任何情况下,这都不是严格的交集,而是一个列表,其中顶级元素是所谓的前台组(查询范围)中的URL比后台组(索引的所有文档)中更为频繁的URL 。

所选用户常见的网址在此汇总中得分很高。

但是,如果2个请求用户中的每个用户访问她自己喜欢的站点的次数比其他站点多得多,并且根本不访问另一个用户最喜欢的站点,则这两个URL仍然会出现,并且得分会比普通URL高。

通常,我建议您探索这种聚合,它可以从数据中获得一些有趣的见解。例如,在您的数据集中这种聚合的更相关的用法是查找其他站点的访问者之间共有的站点。

您可以阅读有关 herehere的更多信息。

关于elasticsearch - Elasticsearch -查找多个查询共有的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128274/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com