gpt4 book ai didi

elasticsearch - 获取elasticsearch中每个匹配项的 `n`记录

转载 作者:行者123 更新时间:2023-12-03 00:49:49 25 4
gpt4 key购买 nike

我有一个 flex 查询,如下所示:

GET /logs-of-year-2019.03.*/_search
{
"sort": [
{
"@timestamp": "desc"
}
],
"query": {
"bool": {
"must": [
{
"terms": {
"Request.advertiserId": [1695, 1252]
}
}
],
"filter": [
{
"range": {
"@timestamp": {
"gte": "now-5h/d",
"lte": "now/d"
}
}
}
]
}
}
}

此查询获取所有 Request.advertiserId16951252的文档。使用 @timestamp过滤器。

结果中包含 hits存储桶,其中包含 10结果,其中包含 1695的一些结果和 1252的一些结果的组合。我要实现的是,对于每个指定的 20,我都需要 n(任何指定的 Request.advertiserId)文档。换句话说, 20 documents表示 169520表示 1252。只需1个 flex 查询就可以实现吗?

我现在可以想到的是对每个 Request.advertiserId进行不同的查询并指定 size=20(这可以是 n变量)。但是然后我将不得不针对 mm编号触发 Request.advertiserId查询。可以在1个单一查询中实现吗?

PS: GET /logs-of-year-2019.03.*/_search上面的行指出,需要扫描指定月份所有日期的日志。索引存储为 logs-of-year-2019.03.01-05(2019年3月1日为 5th小时的日志), logs-of-year-2019.03.01-06(2019年3月1日为 6th hour的日志),依此类推。日志每天每小时创建一次。可以对上述行进行优化,使其从 now仅检查5个小时的索引(可以涉及前一天,因为搜索可以在晚上0100进行。因此,它应该比前一天花费21到00个小时,而从00到01个小时则需要(今天的日期)而不是整个月?

最佳答案

我想你可以做

GET /logs-of-year-2019.03.*/_search
{
"size":0
"sort": [
{
"@timestamp": "desc"
}
],
"query": {
"bool": {
"must": [
{
"terms": {
"Request.advertiserId": [1695, 1252]
}
}
],
"filter": [
{
"range": {
"@timestamp": {
"gte": "now-5h/d",
"lte": "now/d"
}
}
}
]
}
},
"aggs": {
"byAdvertiser": {
"terms":{
"field":"Request.advertiserId"
},
"aggs":{
"by_top_hit":{"top_hits":{"size":10}}
}
}
}
}

关于elasticsearch - 获取elasticsearch中每个匹配项的 `n`记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512272/

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