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.idи compass.idравны:

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

Вместо того , чтобы использовать"compass:id": 123, я хотел бы иметь возможность использовать переменную вместо 123 , например"compass:id": "__bucket_key", где __bucket_keyбы ссылка 123 на первый документ выше и 100 на второй документ выше (plates.ids).

Возможно ли что-то подобное?

1 ответ

  1. Согласно вашему требованию, вы не должны суммировать дальше plates.id. Попробуйте использовать запрос скрипта :

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

    Это принесет вам все те документы, которые имеют те же пластины и компас id.
    Тогда вы можете подать metric aggregationзаявку или около того.

    Убедитесь, что включены сценарии.