我有
类型的文件{
"host-ip": "192.168.0.1",
"HOST_END_iso": "2016-02-19T09:30:41+01:00"
}
我成功查询ES以获得一个随机条目和host-ip
{
"query": {
"match_all": {}
},
"size": 1,
"aggs": {
"rating": {
"terms": {
"field": "host-ip",
"size": 0,
"shard_size": 0
}
}
}
}
我现在想要过滤结果并在两个日期之间获取文档。 query
部分变得更加复杂:
{
"query": {
"filtered": {
"filter": {
"query": {
"match_all": {}
},
"terms": {
"range": {
"HOST_END_iso": {
"gt": "2015-02-19T09:30:41+01:00",
"lt": "2016-02-19T09:30:41+01:00"
}
}
}
}
},
"size": 1
},
"aggs": {
"rating": {
"terms": {
"field": "host-ip",
"size": 0,
"shard_size": 0
}
}
}
}
返回了一条记录,但没有聚合。为什么?
请注意,我必须移动size
,将返回元素的数量限制在第一个query
的范围内。 我不明白为什么我需要这样做:如果我把它放在与query
和aggs
相同的级别(就像在第一次成功示例中那样),我我不再局限于1个元素,但我得到默认值10(所以size
没有被考虑在内,我仍然没有得到aggs)
答案 0 :(得分:1)
您的查询在许多地方都格格不入:这里是正确的
{
"size": 1,
"query": {
"filtered": {
"filter": {
"range": {
"HOST_END_iso": {
"gte": "2015-02-19T09:30:41+01:00",
"lte": "2016-02-19T09:30:41+01:00"
}
}
}
}
},
"aggs": {
"rating": {
"terms": {
"field": "host-ip",
"size": 0,
"shard_size": 0
}
}
}
}
主要问题是terms/range
过滤器,您需要一个但不需要两个。