我还在学习如何在ElasticSearch中使用DSL查询。我有一些文档中的一个字段是列表。我需要计算这个字段中有一个元素、这个字段中有两个元素等的文档的数量。例如,下面是一个文档结构:
文件1:
"Volume": [
{
"partition": "s1",
"fieldtype": ["A","B"]
}
]
文件二:
"Volume": [
{
"partition": "s1",
"fieldtype": ["A"]
}
]
文件三:
"Volume": [
{
"partition": "s1",
"fieldtype": ["B"]
}
]
我需要一种方法来计算出有一个文档在fieldtype字段中有2个元素,有2个文档在fieldtype中有1个元素。如果我尝试将它们聚合为:
"size":0,
"aggs": {
"name": {
"terms": {
"field": "fieldtype.keyword"
}
}
}
我得到了元素的计数(A和B的数量)。如果不使用关键字,我会得到一个错误。
2条答案
按热度按时间20jt8wwn1#
我设想您使用嵌套类型。下面是我的解决方案:
答复:
vx6bjr1n2#
@rabbitbr提供了一个很好的答案,但是我不明白为什么我们要使用嵌套字段。而且,我认为我们需要在这里使用术语聚合而不是求和。不管怎样,这里有一个没有嵌套的解决方案:
如果不使用关键字,则会出现错误。
这是正常的,因为如果没有
keyword
,您会尝试在类型为text
的字段上建立汇总。下面是对上述查询的响应,这是一个非常基本的查询:
如您所见,我们有2个文档具有1个大小的数组,还有1个文档具有2个大小的数组。