Elasticsearch 以最少的文档数量过滤聚合
Elasticsearch filter aggregations on minimal doc count
我真的是 elasticsearch 世界的新手。
假设我在两个字段上有一个嵌套聚合:field1
和 field2
:
{
...
aggs: {
field1: {
terms: {
field: 'field1'
},
aggs: {
field2: {
terms: {
field: 'field2'
}
}
}
}
}
}
这段代码完美地工作并给了我这样的东西:
aggregations: {
field1: {
buckets: [{
key: "foo",
doc_count: 123456,
field2: {
buckets: [{
key: "bar",
doc_count: 34323
},{
key: "baz",
doc_count: 10
},{
key: "foobar",
doc_count: 36785
},
...
]
},{
key: "fooOO",
doc_count: 423424,
field2: {
buckets: [{
key: "bar",
doc_count: 35
},{
key: "baz",
doc_count: 2435453
},
...
]
},
...
]
}
}
现在,我需要排除 doc_count
小于 1000 的所有聚合结果,并改为获取此结果:
aggregations: {
field1: {
buckets: [{
key: "foo",
doc_count: 123456,
field2: {
buckets: [{
key: "bar",
doc_count: 34323
},{
key: "foobar",
doc_count: 36785
},
...
]
},{
key: "fooOO",
doc_count: 423424,
field2: {
buckets: [{
key: "baz",
doc_count: 2435453
},
...
]
},
...
]
}
}
是否可以在查询正文中设置此需求?还是我必须在调用者布局中执行过滤器(在我的例子中是 javascript)?
提前致谢
下次,Toph 先生:RTFM !!!
我觉得真的很傻:我在手册中找到了答案,问了 30 秒后。
我没有删除我的问题,因为它可以帮助,谁知道...
这是答案:
您可以在 terms
聚合中指定 min_doc_count
属性。
它给你:
{
...
aggs: {
field1: {
terms: {
field: 'field1',
min_doc_count: 1000
},
aggs: {
field2: {
terms: {
field: 'field2',
min_doc_count: 1000
}
}
}
}
}
}
您还可以为聚合的每个级别指定特定的最小计数。
还有什么? :)
我真的是 elasticsearch 世界的新手。
假设我在两个字段上有一个嵌套聚合:field1
和 field2
:
{
...
aggs: {
field1: {
terms: {
field: 'field1'
},
aggs: {
field2: {
terms: {
field: 'field2'
}
}
}
}
}
}
这段代码完美地工作并给了我这样的东西:
aggregations: {
field1: {
buckets: [{
key: "foo",
doc_count: 123456,
field2: {
buckets: [{
key: "bar",
doc_count: 34323
},{
key: "baz",
doc_count: 10
},{
key: "foobar",
doc_count: 36785
},
...
]
},{
key: "fooOO",
doc_count: 423424,
field2: {
buckets: [{
key: "bar",
doc_count: 35
},{
key: "baz",
doc_count: 2435453
},
...
]
},
...
]
}
}
现在,我需要排除 doc_count
小于 1000 的所有聚合结果,并改为获取此结果:
aggregations: {
field1: {
buckets: [{
key: "foo",
doc_count: 123456,
field2: {
buckets: [{
key: "bar",
doc_count: 34323
},{
key: "foobar",
doc_count: 36785
},
...
]
},{
key: "fooOO",
doc_count: 423424,
field2: {
buckets: [{
key: "baz",
doc_count: 2435453
},
...
]
},
...
]
}
}
是否可以在查询正文中设置此需求?还是我必须在调用者布局中执行过滤器(在我的例子中是 javascript)?
提前致谢
下次,Toph 先生:RTFM !!!
我觉得真的很傻:我在手册中找到了答案,问了 30 秒后。 我没有删除我的问题,因为它可以帮助,谁知道...
这是答案:
您可以在 terms
聚合中指定 min_doc_count
属性。
它给你:
{
...
aggs: {
field1: {
terms: {
field: 'field1',
min_doc_count: 1000
},
aggs: {
field2: {
terms: {
field: 'field2',
min_doc_count: 1000
}
}
}
}
}
}
您还可以为聚合的每个级别指定特定的最小计数。
还有什么? :)