ElasticSearch中的相异查询

7dl7o3gd  于 2022-12-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(102)

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

我使用下面的查询:-

GET /products/_search
{
"size": 0,
"aggs" : {
    "category" : {
        "terms" : { "field" : "category",  "size" : 1500 }
    }
}}

这将返回[1], [2], [3], [4], [5], [6], [7]。我不需要列表字段中的单个唯一项。我宁愿寻找完整的唯一列表。
我在上面的查询中遗漏了什么?我使用的是ElasticSearch v7.10

ippsafx7

ippsafx71#

可以将术语聚合与脚本一起使用:

{
  "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
        }
      ]
    }
  }

相关问题