代码之家  ›  专栏  ›  技术社区  ›  NoName2

平均结果的弹性Luence查询

  •  2
  • NoName2  · 技术社区  · 7 年前

    我不熟悉弹性搜索和Lucene语法。

    我想知道的是,无论如何都有办法得到特定时间段的平均值。

    例如,我的索引中存储了以下信息。

    Index Name Result TimeStamp
    a-3    A    7     March 7th 2018, 16:17:35.000
    a-3    A    13    March 7th 2018, 16:17:36.000
    a-3    B    5     March 7th 2018, 16:17:37.000
    

    我想写一个查询,返回16:17:35到16:17:38之间的a=10和B=5的平均结果。

    这可能吗?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   pkhlop    7 年前

    您可以合并 range query 并使用嵌套聚合( term aggregation avg aggregation )

    POST my_index/_search
    {
      "size": 0, 
      "query": {
        "range": {
          "TimeStamp": {
            "gte": "2018-03-07 16:17:35",
            "lte": "2018-03-07 16:17:38" 
          }
        }
      }, 
    
      "aggs": {
        "name": {
          "terms": {
            "field": "Name",
            "size": 10
          }
          , "aggs": {
            "stats": {
              "avg": {
                "field": "Result"
              }
            }
          }
        }
      }
    }
    

    结果如下所示

    {
      "took": 4,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
      },
      "hits": {
        "total": 3,
        "max_score": 0,
        "hits": []
      },
      "aggregations": {
        "name": {
          "doc_count_error_upper_bound": 0,
          "sum_other_doc_count": 0,
          "buckets": [
            {
              "key": "A",
              "doc_count": 2,
              "stats": {
                "value": 10
              }
            },
            {
              "key": "B",
              "doc_count": 1,
              "stats": {
                "value": 5
              }
            }
          ]
        }
      }
    }