我对Elasticsearch世界真的很陌生。
比方说,我有两个字段嵌套聚集:field1与field2:
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的聚合结果,而改为:
doc_count
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)?
提前致谢
下次,M’sieur Toph’:RTFM!
我真的很傻:问了30秒后,我在手册中找到了答案。我不会删除我的问题,因为它可以帮助谁知道…
这是答案:
您可以min_doc_count在terms聚合中指定属性。
min_doc_count
terms
它给你:
{ ... aggs: { field1: { terms: { field: 'field1', min_doc_count: 1000 }, aggs: { field2: { terms: { field: 'field2', min_doc_count: 1000 } } } } } }
您还可以为聚合的每个级别指定特定的最小计数。
还有什么 ?:)