对于不是数组而是简单对象的嵌套字段上的聚合,我不太清楚。
让我们考虑一个简单的案例场景,其中我有一个带有语言的嵌套字段 + normalized_name(充当某种 ID)
# index/_mapping
"tags": {
"type": "nested",
"properties": {
"english": {
"type": "text",
"analyzer": "english"
},
"french": {
"type": "text",
"analyzer": "french_light"
},
"normalized": {
"type": "keyword"
}
}
},
给定一个搜索查询 Q,我想汇总其标签(英语或法语或规范化)与我的术语完全匹配的文档数量(如果文档与多个 fr/en/normalized 嵌套字段匹配,则应仅计算一次,但这不会真的很重要,因为英语/法语/标准化都是不同的区分大小写的方式(但是可能不是不区分大小写的方式)并将它们tags.normalized
用作我的聚合的关键。我相信我已经正确完成了过滤,但我仍然没有得到任何桶...
以前,当我只有一个值时,我正在做
aggs: {tags: {terms: {field: "tag", size: 1000}}}}}
当我阅读文档时,我看到许多对嵌套聚合的引用,但它们似乎都与聚合内的嵌套聚合有关,但我只想根据嵌套字段聚合文档计数。我试过类似的东西
aggs: {tag_names: {terms: {field: "tags.normalized", size: 100}}
...但它似乎不起作用。我必须使用nested
语法吗?我不想得到嵌套聚合的结果,只想在嵌套字段上聚合...
糟糕,经过多次尝试并更清楚地阅读文档后,我意识到nested
Elasticsearch的类型只是“嵌套数组”而不是“嵌套对象”。
对于嵌套对象,我只需要type: :object
在我的映射中使用......在此之后一切都很好aggs: {tag_names: {terms: {field: "tags.normalized", size: 100}}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句