我有一个这样的实体:
{
id: "id1",
values: [0, 1, 5, 20, 30]
}
values数组包含大量值(最多100k),实际上是日期(为了便于使用,我在这里使用了)。所以我需要在几个文档中提取范围内的所有日期。我需要符合某些标准的所有文档的值的联合。
目前我有一个查询和一个术语聚合来获取所有值。但我需要在范围内过滤值。是否有可能告诉聚合只取10到20之间的值,即使有问题的文档中的值为1-100k?
答案 0 :(得分:1)
这可以做到但在你的情况下会很棘手。对于您的示例中的数值,您可以通过在数组中提供它们来filter。
{
"size": 0,
"aggs": {
"unique": {
"terms": {
"field": "date_values",
"size": 10,
"include": [10,11,12,13,14,15,16,17,18,19,20]
}
}
}
}
但是由于你有日期,你必须将它们作为字符串与索引:not_analyzed 在单独的字段中编入索引。如果您愿意,可以使用copy_to。之后,您需要正则表达式来过滤日期范围。
{
"size": 0,
"aggs": {
"unique": {
"terms": {
"field": "string_date_values",
"size": 10,
"include": "2016.*|2015.*"
}
}
}
}
以上查询仅为您提供2016或2015年开始的日期,例如 2016-04-04 , 2015-11-10 等。