Elasticsearch - 使用术语桶密钥作为过滤变量

时间:2016-05-03 15:20:35

标签: elasticsearch

我索引这些:

POST nephi/boat/1
{
    "plates": {
        "id": 123,
        "type": "brass"
    },
    "compass": {
        "id": 123,
        "name": "liahona"
    }
}

POST nephi/boat/2
{
    "plates": {
        "id": 100,
        "type": "brass"
    },
    "compass": {
        "id": 234,
        "name": "liahona"
    }
}

我使用此搜索查询,因此我可以在plates.idcompass.id相等的情况下进行汇总:

POST nephi/boat/_search
{
   "aggs": {
      "terms_agg": {
         "terms": {
            "field": "plates.id"
         },
         "aggs": {
            "filter_agg": {
               "filter": {
                  "term": {
                     "compass.id": 123
                  }
               }
            }
         }
      }
   },
   "size": 0
}

我希望能够使用变量代替123,而不是"compass:id": 123 "compass:id": "__bucket_key",其中__bucket_key将在上面的第一个文档中引用123,上面的第二个文档(plates.id s)上有100个。

这样的事情可能吗?

1 个答案:

答案 0 :(得分:0)

根据您的要求,您无需在plates.id上进行汇总。尝试使用Script Query

   "filter": {
    "script": {
       "script": "doc['plates.id'].value == doc['compass.id'].value"
    }
}

这将获取所有具有相同印版和罗盘ID的文件。 然后,您可以应用metric aggregation左右。

确保启用脚本。