首页 文章

Elasticsearch:从查询匹配中计算文档

提问于
浏览
1

我想获得一个时间范围内与特定字符串匹配的文档数 .

如何从此查询中指定时间范围?

GET myindex/_count
{
  "query": {
            "match" : {
            "log" : "ERROR"
        }
  }
}

要获得时间范围:

{
  "query": {
    "range": {
      "msgSubmissionTime": {
        "gte": "now-10m",
        "lt": "now"
      }
    }
  }
}

有没有办法结合两个查询?

3 回答

  • 0

    我上面的人是正确的,但他们都为 must 添加了多余的 [] ,这意味着查询超过匹配字段 .

    GET _search
    {
      "query": {
        "bool" : {
          "must" : {
            "match" : {  "log": "ERROR" }
          },
         "filter": 
            {
              "range": {
                "msgSubmissionTime": {
                   "gte": "now-10m",
                   "lte": "now"
                }
              }
            }
        }
      }
    }
    
  • 0

    你当然可以 . 它可以通过两种方式完成:使用过滤和布尔查询 .

    Elastic建议使用过滤器来预过滤结果 - 它们比查询更快 .

    布尔查询可以通过AND,OR,NOT运算符来收集不同的查询 .

    在官方弹性文档中,您可以找到几乎适合您的问题的示例 - elasticsearch documentation

    所以你的查询将是:

    {
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "log": "ERROR"
              }
            }
          ],
          "filter": {
            "range": {
              "msgSubmissionTime": {
                "gte": "now-10m",
                "lte": "now"
              }
            }
          }
        }
      }
    }
    
  • 1

    试试这个 .

    {
      "query": {
        "bool": {
          "filter": {
            "range": {
              "msgSubmissionTime": {
                "gte": "now-10m",
                "lt": "now"
              }
            }
          },
          "must": [
            {
              "term": {
                "log" : "ERROR"
              }
            }
          ]
        }
      }
    }
    

相关问题