如何在ElasticSearch中计算嵌套字段中的对象数?示例Map:
"base_keywords": {
"type": "nested",
"properties": {
"base_key": {
"type": "text"
},
"category": {
"type": "text"
},
"created_at": {
"type": "date"
},
"date": {
"type": "date"
},
"rank": {
"type": "integer"
}
}
}
我想计算嵌套字段“base_keywords”中的对象数。
3条答案
按热度按时间lrpiutwd1#
您需要使用内联脚本来执行此操作。以下是对我有效的方法:(使用ES 6.x):
r8xiu3jd2#
Agg通常适用于计数和分组,对于嵌套文档,可以使用嵌套Agg:
您不需要指定要计数的内容,但是aggs在对数据进行分组和计数方面非常灵活。
已更新(这假定您有一个.keyword字段创建“keys”值,因为类型为“text”的属性不能被聚合或计数:
为了简单地计算嵌套键的数量,您可以简单地执行以下操作:
如果您想对“主”文档或嵌套文档上的字段值进行分组,则必须扩展Map/数据模型,以包含可聚合的术语,这包括ElasticSearch中除“文本”之外的大多数数据类型,例如:日期数字地理位置关键字。
编辑:每个顶层文档的唯一标识符上的聚合示例,假设您在该文档上有一个名为“WordMappingId”的整型属性
如果不向顶层的“word_mapping”文档添加任何属性,则无法对每个唯一文档进行聚合。builtin _id字段默认情况下是不可聚合的,我建议您在顶层的源数据中包含一个唯一标识符以进行聚合。
注意:“missing”参数会将所有没有设置WordMappingId属性的文档放入一个与所提供的值相对应的库中,这样可以确保搜索结果中没有丢失任何文档。
Aggs可以支持类似于SQL中group by的行为,但是您需要一些东西来实际分组,并且根据您提供的Map,您的索引中当前没有这样的字段。
ojsjcaue3#
我尝试执行类似的操作以了解生产数据分布。以下查询帮助我找到了前5个