Elasticsearch API返回的文档数相同
你好 Elasticsearch API存在问题。我编写了一个脚本,在其中执行几个不同的请求。在这些查询中,我试图计算过去半小时内来自不同主机的文档数 在所有请求中,我都使用“GET/log/\u count” 以及另一项核查请求:Elasticsearch API返回的文档数相同,api,
elasticsearch,elk,Api,
elasticsearch,Elk,你好 Elasticsearch API存在问题。我编写了一个脚本,在其中执行几个不同的请求。在这些查询中,我试图计算过去半小时内来自不同主机的文档数 在所有请求中,我都使用“GET/log/\u count” 以及另一项核查请求: "query": { "bool": { "filter": { "range": {
"query": {
"bool": {
"filter": {
"range": {
"@timestamp": {
"gte": "now-30m",
"lte": "now"
}
}
}
}
}
但是当我运行脚本时,得到的文档数量大致相同。即使在最后一个请求中(应该显示所有文档的总和),也会显示相同的金额,尽管它只配置了“范围”
XXX:15691
YYY:15689
ZZZ:15689
全部:15689
这是正常的行为,还是我做错了什么
UPD
这可能是意料之中的行为 原因是您现在有两个查询可以在
上运行
。您可能会在时间1时执行query1,在时间2时执行query2<代码>现在对于时间1和时间2都是不同的
同时(time2-time1),可能会添加一些文档。因此,你看到了细微的差别
要计算所有主机的数量
GET logs/_search
{
"size": 0,
"aggs": {
"hosts": {
"filters": {
"filters": {
"xxx": {
"match": {
"host": "xxx"
}
},
"yyy": {
"match": {
"host": "yyy"
}
}
}
},
"aggs": {
"range": {
"date_range": {
"field": "@timestamp",
"ranges": [
{
"to": "now-30m"
},
{
"from": "now"
}
]
}
}
}
}
}
}
如果您的值不止一个单词,那么您需要使用
匹配短语
而不是匹配
,这可能是一种预期行为
原因是您现在有两个查询可以在上运行
。您可能会在时间1时执行query1,在时间2时执行query2<代码>现在对于时间1和时间2都是不同的
同时(time2-time1),可能会添加一些文档。因此,你看到了细微的差别
要计算所有主机的数量
GET logs/_search
{
"size": 0,
"aggs": {
"hosts": {
"filters": {
"filters": {
"xxx": {
"match": {
"host": "xxx"
}
},
"yyy": {
"match": {
"host": "yyy"
}
}
}
},
"aggs": {
"range": {
"date_range": {
"field": "@timestamp",
"ranges": [
{
"to": "now-30m"
},
{
"from": "now"
}
]
}
}
}
}
}
}
如果您的值不止一个单词,则需要使用
匹配短语
而不是匹配
,但每个请求中的搜索参数不同。文档的数量不应该随时间间隔而变化吗?这些文档从不同的主机发送到ELK堆栈,但我只计算每个主机的文档数。此外,“must”在那里用作逻辑“AND”,因此我应该只从主机“xxx”获取过去半小时内的文档数,但这不会发生。我得到了文件的总数。主机xxx可以几乎实时发送文件。不是吗?这也是正确的。您有不同的查询参数。这也可能导致差异。文档是实时发送的。如果我执行一个包含所有四个请求的脚本,我得到的文档数量会增加或减少。也就是说,任何这些查询都返回所有文档的总数。也就是说,如果我现在执行脚本,那么我将从所有请求中获得大约15000-16000个文档,但从理论上讲,我应该从前三个请求中获得更少的文档。如果您添加了返回值,那么在前三个查询中,您应该得到第四个查询返回的结果。有没有办法得到我想要的?或者它已经是Elasticsearch的功能了?@vovagib检查我的编辑,它会给你最后30分钟的主机计数。祝你好运!谢谢你的帮助。我使用了您的请求,但我仍然得到所有主机的相同数量的文档<代码>xxx=2585、yyy=2585和zzz=2585。这是过去半小时内所有文档的总数。我需要获得过去半小时内来自单个主机的文档数,但每个请求中的搜索参数都不同。文档的数量不应该随时间间隔而变化吗?这些文档从不同的主机发送到ELK堆栈,但我只计算每个主机的文档数。此外,“must”在那里用作逻辑“AND”,因此我应该只从主机“xxx”获取过去半小时内的文档数,但这不会发生。我得到了文件的总数。主机xxx可以几乎实时发送文件。不是吗?这也是正确的。您有不同的查询参数。这也可能导致差异。文档是实时发送的。如果我执行一个包含所有四个请求的脚本,我得到的文档数量会增加或减少。也就是说,任何这些查询都返回所有文档的总数。也就是说,如果我现在执行脚本,那么我将从所有请求中获得大约15000-16000个文档,但从理论上讲,我应该从前三个请求中获得更少的文档。如果您添加了返回值,那么在前三个查询中,您应该得到第四个查询返回的结果。有没有办法得到我想要的?或者它已经是Elasticsearch的功能了?@vovagib检查我的编辑,它会给你最后30分钟的主机计数。祝你好运!谢谢你的帮助。我使用了您的请求,但我仍然得到所有主机的相同数量的文档<代码>xxx=2585、yyy=2585和zzz=2585。这是过去半小时内所有文档的总数。我需要在过去半小时内从单个主机获取文档数
GET logs/_search
{
"size": 0,
"aggs": {
"hosts": {
"filters": {
"filters": {
"xxx": {
"match": {
"host": "xxx"
}
},
"yyy": {
"match": {
"host": "yyy"
}
}
}
},
"aggs": {
"range": {
"date_range": {
"field": "@timestamp",
"ranges": [
{
"to": "now-30m"
},
{
"from": "now"
}
]
}
}
}
}
}
}