Sam*_*zzo 143 aggregation elasticsearch
我试图在聚合上列出所有桶,但它似乎只显示前10个.
我的搜索:
curl -XPOST "http://localhost:9200/imoveis/_search?pretty=1" -d'
{
"size": 0,
"aggregations": {
"bairro_count": {
"terms": {
"field": "bairro.raw"
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
返回:
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 16920,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"bairro_count" : {
"buckets" : [ {
"key" : "Barra da Tijuca",
"doc_count" : 5812
}, {
"key" : "Centro",
"doc_count" : 1757
}, {
"key" : "Recreio dos Bandeirantes",
"doc_count" : 1027
}, {
"key" : "Ipanema",
"doc_count" : 927
}, {
"key" : "Copacabana",
"doc_count" : 842
}, {
"key" : "Leblon",
"doc_count" : 833
}, {
"key" : "Botafogo",
"doc_count" : 594
}, {
"key" : "Campo Grande",
"doc_count" : 456
}, {
"key" : "Tijuca",
"doc_count" : 361
}, {
"key" : "Flamengo",
"doc_count" : 328
} ]
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有超过10个密钥用于此聚合.在这个例子中,我有145个键,我想要每个键的计数.桶上有一些分页吗?我可以得到所有这些吗?
我正在使用Elasticsearch 1.1.0
kee*_*ety 181
size参数应该是术语查询示例的参数:
curl -XPOST "http://localhost:9200/imoveis/_search?pretty=1" -d'
{
"size": 0,
"aggregations": {
"bairro_count": {
"terms": {
"field": "bairro.raw",
"size": 0
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
正如文档中所提到的仅适用于1.1.0版本
根据@PhaedrusTheGreek评论更新答案.
设置size:0在2.x以后已弃用,原因是群集上存在高基数字段值的内存问题.您可以在github 问题中阅读更多相关信息.
建议为size1到2147483647之间的数字明确设置合理的值.
sam*_*sam 27
如何显示所有桶?
{
"size": 0,
"aggs": {
"aggregation_name": {
"terms": {
"field": "your_field",
"size": 10000
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
注意
"size":10000获得最多10000桶.默认值为10.
"size":0结果,"hits"默认包含10个文档.我们不需要它们.
默认情况下,存储桶按doc_count递减顺序排序.
为什么我会收到
Fielddata is disabled on text fields by default错误?
因为默认情况下在文本字段上禁用fielddata.如果您没有明确选择字段类型映射,则它具有字符串字段的默认动态映射.
所以,而不是写作"field": "your_field"你需要"field": "your_field.keyword".
Hil*_*hka 11
如果您想在不设置幻数 ( size: 10000) 的情况下获取所有唯一值,请使用COMPOSITE AGGREGATION (ES 6.5+)。
来自官方文档:
“如果您想检索嵌套术语聚合中的所有术语或术语的所有组合,您应该使用 COMPOSITE AGGREGATION,它允许对所有可能的术语进行分页,而不是设置大于术语聚合中字段基数的大小。术语聚合旨在返回顶部术语,并且不允许分页。”
JavaScript 中的实现示例:
const ITEMS_PER_PAGE = 1000;
const body = {
"size": 0, // Returning only aggregation results: https://www.elastic.co/guide/en/elasticsearch/reference/current/returning-only-agg-results.html
"aggs" : {
"langs": {
"composite" : {
"size": ITEMS_PER_PAGE,
"sources" : [
{ "language": { "terms" : { "field": "language" } } }
]
}
}
}
};
const uniqueLanguages = [];
while (true) {
const result = await es.search(body);
const currentUniqueLangs = result.aggregations.langs.buckets.map(bucket => bucket.key);
uniqueLanguages.push(...currentUniqueLangs);
const after = result.aggregations.langs.after_key;
if (after) {
// continue paginating unique items
body.aggs.langs.composite.after = after;
} else {
break;
}
}
console.log(uniqueLanguages);Run Code Online (Sandbox Code Playgroud)
在术语聚合中将大小(第二个大小)增加到10000,您将获得大小为10000的存储桶。默认情况下,它的大小设置为10。此外,如果要查看搜索结果,只需将第一个大小设为1,即可请参阅1文档,因为ES确实支持搜索和聚合。
curl -XPOST "http://localhost:9200/imoveis/_search?pretty=1" -d'
{
"size": 1,
"aggregations": {
"bairro_count": {
"terms": {
"field": "bairro.raw",
"size": 10000
}
}
}
}'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70294 次 |
| 最近记录: |