【问题标题】:Grafana lucene query: Difference between fields.someFieldname = xxx and fields.someFieldname: xxxGrafana lucene 查询:fields.someFieldname = xxx 和 fields.someFieldname: xxx 之间的区别
【发布时间】:2020-02-08 21:33:27
【问题描述】:

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

直觉上我猜第一个更具体,但它给出的总数更高。

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

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

这是使用“=”的屏幕截图

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

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

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

【问题讨论】:

    标签: elasticsearch logging lucene grafana


    【解决方案1】:

    在 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 中看到的(语义上等同于我在上面分享的那个),: 是您需要用来分隔字段名称和值的字符。

    【讨论】:

    • 谢谢你,Val,但有什么区别? '=' 也可以使用,即使它没有写在文档中。
    • = 符号通常用于查询字符串中的 URL。也许如果你显示完整的查询,它会更容易显示给你。
    • 查询实际上与问题中的一样:“fields.myPath="someEndPoint" AND someOtherFilter"
    • 同样,Lucene 查询语言只知道: 而不是=,后者是查询字符串参数的HTTP 字符。 Lucene 查询被编码在这些参数之一中
    • 好吧,我明白了——这仍然不能解释为什么我会得到不同的计数值,但我想我会顺其自然。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 2019-08-04
    • 2014-10-03
    • 2012-01-15
    • 1970-01-01
    • 2018-03-06
    相关资源
    最近更新 更多