我想获取在某个时间范围内与特定字符串匹配的文档数。
如何从该查询中指定时间范围?
GET myindex/_count
{
"query": {
"match" : {
"log" : "ERROR"
}
}
}
要获取时间范围:
{
"query": {
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lt": "now"
}
}
}
}
有没有办法组合两个查询?
答案 0 :(得分:1)
我上面的家伙是正确的,但是他们都为[
添加了多余的]
,must
,这意味着对匹配字段的查询超过了。
GET _search
{
"query": {
"bool" : {
"must" : {
"match" : { "log": "ERROR" }
},
"filter":
{
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lte": "now"
}
}
}
}
}
}
答案 1 :(得分:0)
可以。 它可以通过两种方式完成:使用过滤和布尔查询。
Elastic建议使用过滤器预过滤结果-与查询相比,它们更快。
布尔查询可以通过AND,OR,NOT运算符来合并不同的查询。
在Elastic官方文档中,您可以找到几乎符合您的问题的示例-elasticsearch documentation
因此您的查询将如下:
{
"query": {
"bool": {
"must": [
{
"match": {
"log": "ERROR"
}
}
],
"filter": {
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lte": "now"
}
}
}
}
}
}
答案 2 :(得分:0)
尝试一下。
{
"query": {
"bool": {
"filter": {
"range": {
"msgSubmissionTime": {
"gte": "now-10m",
"lt": "now"
}
}
},
"must": [
{
"term": {
"log" : "ERROR"
}
}
]
}
}
}