ElasticSearch中的Distinct查询



我有一个索引,其中字段(类别)是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
}
]
}
}