1

考虑存储在 ElasticSearch 中的事件日志。事件看起来像这样

{
  "timestamp": "2013-04-04T15:38:17Z",
  "color": "red"
}

{
  "timestamp": "2013-04-04T17:51:21Z",
  "color": "green"
}

我想为每种颜色绘制频率时间线。我知道我可以通过以下两个查询获得时间表:

{
  "query": {
    "match": {
      "color": "red"
    }
  },
  "size": 0,
  "facets": {
    "freq": {
      "date_histogram": {
        "interval": "day",
        "field": "timestamp"
      }
    }
  }
}

第二个查询将"match": { "color": "green" }.

我可以将这些查询合二为一吗?

  • 计数(颜色)/天/桶
  • 还是每种颜色一个面,包含该颜色的直方图?

对于两种颜色,单独的查询可以正常工作,但您可能会怀疑这是一个人为的例子。我真的要处理十多种颜色,此时单个查询会非常好。

4

1 回答 1

4

您可以使用facet_filter将不同颜色的构面组合到同一个请求中:

{
    "facets": {
        "freq_red": {
            "date_histogram": {
                "interval": "day",
                "field": "timestamp"
            },
            "facet_filter": {
                "term": {
                    "color": "red"
                }
            }
        },
        "freq_green": {
            "date_histogram": {
                "interval": "day",
                "field": "timestamp"
            },
            "facet_filter": {
                "term": {
                    "color": "green"
                }
            }
        }
    }
}
于 2013-04-05T01:02:27.960 回答