我有一个索引,其中字段(类别)是list
字段。我想获取索引中所有不同的类别
示例如下:
Doc1 -
{
"category": [1,2,3,4]
}
Doc2 -
{
"category": [5,6]
}
Doc3 -
{
"category": [1,2,3,4]
}
Doc4 -
{
"category": [1,2,7]
}
我的输出应该是
[1,2,3,4]
[5,6]
[1,2,7]
I使用以下查询:-
GET /products/_search
{
"size": 0,
"aggs" : {
"category" : {
"terms" : { "field" : "category", "size" : 1500 }
}
}}
返回[1], [2], [3], [4], [5], [6], [7]
。我不希望列表字段中有单独的唯一项。我想要完整的唯一列表。
我在上面的查询中缺少什么?我正在使用ElasticSearch v7.10
您可以通过脚本使用术语聚合:
{
"size": 0,
"aggs": {
"category":{
"terms": {
"script": {
"source": """
def cat="";
for(int i=0;i<doc['category'].length;i++){
cat+=doc['category'][i];}
return cat;
"""
}
}
}
}
}
上述查询将返回如下结果:
"aggregations": {
"category": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "1234",
"doc_count": 2
},
{
"key": "127",
"doc_count": 1
},
{
"key": "56",
"doc_count": 1
}
]
}
}