如何从 Elasticsearch 中的 2 个集合中获取所有唯一标签?
How to get all unique tags from 2 collections in Elasticsearch?
我有一组标签存储在 document.tags 和 document.fields.articleTags.
这就是我从两个命名空间中获取所有标签的方法,但是我如何才能将结果合并到一个数组中以响应来自 ES 的结果?
{
"query" : {
"match_all" : { }
},
"size": 0,
"aggs" : {
"tags" : {
"terms" : { "field" : "tags" }
},
"articleTags" : {
"terms" : { "field" : "articleTags" }
}
}
}
结果
我得到了 articleTags.buckets 和 tags.buckets 中列出的标签。是否可以一桶送达?
{
"aggregations": {
"articleTags": {
"buckets": [
{
"key": "halloween"
}
]
},
"tags": {
"buckets": [
{
"key": "news"
}
是的,您可以将单个 terms
聚合与脚本一起使用,而不是 "join" 两个数组(即将它们相加),它是这样的:
{
"query" : {
"match_all" : { }
},
"size": 0,
"aggs" : {
"all_tags" : {
"terms" : { "script" : "doc.tags.values + doc.articleTags.values" }
}
}
}
请注意,您需要确保 enable dynamic scripting 才能使此查询正常工作。
我有一组标签存储在 document.tags 和 document.fields.articleTags.
这就是我从两个命名空间中获取所有标签的方法,但是我如何才能将结果合并到一个数组中以响应来自 ES 的结果?
{
"query" : {
"match_all" : { }
},
"size": 0,
"aggs" : {
"tags" : {
"terms" : { "field" : "tags" }
},
"articleTags" : {
"terms" : { "field" : "articleTags" }
}
}
}
结果
我得到了 articleTags.buckets 和 tags.buckets 中列出的标签。是否可以一桶送达?
{
"aggregations": {
"articleTags": {
"buckets": [
{
"key": "halloween"
}
]
},
"tags": {
"buckets": [
{
"key": "news"
}
是的,您可以将单个 terms
聚合与脚本一起使用,而不是 "join" 两个数组(即将它们相加),它是这样的:
{
"query" : {
"match_all" : { }
},
"size": 0,
"aggs" : {
"all_tags" : {
"terms" : { "script" : "doc.tags.values + doc.articleTags.values" }
}
}
}
请注意,您需要确保 enable dynamic scripting 才能使此查询正常工作。