我在弹性搜索中遇到了混乱(版本: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)。
为什么过滤器未应用? 任何人都可以帮忙。
答案 0 :(得分:1)
' extended_bound '最小值是问题所在。由于min为0且字段为date类型,因此桶从1970年开始。
答案 1 :(得分:0)
您似乎将范围过滤器与范围聚合混淆。
范围过滤器有两种类型的参数,gte或gt(大于)和lte或lt(小于)。
from / to参数用于范围聚合,用于将结果拆分为用户定义的存储桶。