【问题标题】:Combining Range and Histogram Filter in ElasticSearch在 ElasticSearch 中结合范围和直方图过滤器
【发布时间】:2013-04-05 09:02:27
【问题描述】:

考虑存储在 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" }

我可以将这些查询合并为一个,从而得到我的任一

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

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

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以使用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"
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 谢谢,我一定错过了文档中的内容。有没有办法在不知道(或查找)有哪些颜色的情况下为每种颜色运行一个方面?
    • @Peter:Sure TermsFacet 允许您在不事先知道条款的情况下按术语进行分面。这里的术语将是一种颜色。 elasticsearch.org/guide/reference/api/search/facets/terms-facet
    • 是的,terms facet 会返回没有直方图的terms 列表,以后可以用来执行上面描述的多个 histogram facets 查询。但目前我想不出一种方法可以在一个查询中同时执行它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多