Elasticsearch范围过滤器在日期直方图中不起作用

时间:2015-09-21 13:49:28

标签: elasticsearch elasticsearch-plugin

我在弹性搜索中遇到了混乱(版本:1.7.1)。根据文档https://www.elastic.co/guide/en/elasticsearch/guide/current/_filtering_queries_and_aggregations.html,应用于查询的过滤器也将应用于聚合。当我发出以下查询时,我得到了意想不到的结果。

  $('#content').on("focus", function(event) {
    $('#lorem-ipsum-wrapper').css("display", "block");
  });

  $('#content').on("blur", function(event) {
     $('#lorem-ipsum-wrapper').css("display", "none");
  });

结果的一部分在这里。

{
  "aggregations": {
    "outer": {
      "aggregations": {
        "inner": {
          "date_histogram": {
            "extended_bounds": {
              "min": 0
            },
            "field": "time",
            "interval": "30d",
            "min_doc_count": 0,
            "order": {
              "_key": "desc"
            }
          }
        }
      },
      "terms": {
        "field": "ad_id",
        "size": 10
      }
    }
  },
  "query": {
    "filtered": {
      "filter": {
        "and": {
          "filters": [
            {
              "range": {
                "time": {
                  "from": 1441619173000,
                  "include_lower": false,
                  "include_upper": true,
                  "to": 1442835370000
                }
              }
            }
          ]
        }
      }
    }
  }
}

请注意,汇总结果包含我已应用范围之外的密钥。时间字段的类型为日期。我也尝试了以下查询,但结果是一样的。

{
  "buckets": [
    {
      "key": 203737,
      "doc_count": 27,
      "inner": {
        "buckets": [
          {
            "key_as_string": "2015-09-02T00:00:00.000Z",
            "key": 1441152000000,
            "doc_count": 27
          },
          {
           "key_as_string": "1970-01-31T00:00:00.000Z",
           "key": 2592000000,
           "doc_count": 0
          },

          ...
          {
            "key_as_string": "1970-01-01T00:00:00.000Z",
            "key": 0,
            "doc_count": 0
          }
        ]
      }
    }
  ]
}

我的问题是聚合结果包括过滤器之外的结果("来自":1441619173000,"来自":1442835370000)。

为什么过滤器未应用? 任何人都可以帮忙。

2 个答案:

答案 0 :(得分:1)

' extended_bound '最小值是问题所在。由于min为0且字段为date类型,因此桶从1970年开始。

答案 1 :(得分:0)

您似乎将范围过滤器与范围聚合混淆。

范围过滤器有两种类型的参数,gte或gt(大于)和lte或lt(小于)。

from / to参数用于范围聚合,用于将结果拆分为用户定义的存储桶。