Grafana Lucene查询:fields.someFieldname = xxx和fields.someFieldname:xxx

时间:2019-10-11 11:00:53

标签: elasticsearch logging lucene grafana

我正在编写Grafana lucene查询,并且在绘制fields.statusCode = xxx和fields.statusCode:xxx时 我得到两个不同的总数,第一个fx为1200,第二个为24。

直觉上,我猜第一个是更具体的,但总数却更高。

':'和'='有什么区别?

更新提供屏幕截图 这是使用“:”的屏幕截图。

query using ":"

以下是使用“ =“

query using "="

如您所见,唯一改变的是:vs =。

我标记了图片的某些部分(不会影响问题)。

查询中的第一个标记就是URL。

1 个答案:

答案 0 :(得分:0)

在Lucene查询中,要使用的正确运算符是:而不是=,因此产生24个结果的fields.statusCode:xxx是正确的操作方式。

更多信息可以在Lucene query parser syntax文档中找到。

无论您在Grafana的Query字段中输入什么内容,都将最终显示在下面的query_string中:

{
  "size": 0,
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "@timestamp": {
              "gte": "1571221609944",
              "lte": "1571223409944",
              "format": "epoch_millis"
            }
          }
        },
        {
          "query_string": {
            "analyze_wildcard": true,
            "query": "fields.requestPath:\"bla bla bla\" AND XYZ AND method:POST"
          }
        }
      ]
    }
  },
  "aggs": {
    ...
  }
}

正如您在query_string query syntax中看到的那样(在语义上等同于我在上面共享的那个),:是您需要用来分隔字段名称和值的字符。