Отобразить количество вложенных объектов в запросе ElasticSearch

#elasticsearch #select #count #nested #size

#elasticsearch #выберите #количество #вложенный #размер

Вопрос:

Я хотел бы получить все документы, соответствующие моим критериям поиска, и отсортировать их на основе количества вложенных объектов в определенном поле. Я бы хотел также отобразить количество вложенных объектов. У меня работает первое, но мне трудно понять, как сделать второе.

Вот мой запрос:

 GET _search
{
  "_source": "nested_objects",
  "query": {
    "bool": {
      "must": [
        {"nested" : {
            "path" : "nested_objects",
            "query" : {
                "bool" : {
                    "should" :[
                      {"term" : {"nested_objects.is_active": true}}
                    ]
                }
            },
            "score_mode": "sum"
        }}
      ]
    }
  }
}
  

Результат отображается в виде:

 "_source": {
  "nested_objects": [
    {
      "is_active": true
    },
    ...
  ]
}
  

Однако мне нужно, чтобы результат был таким:

 "_source": {
  "size": 4,
  "nested_objects": [
    {
      "is_active": true
    },
    {
      "is_active": true
    }, 
    {
      "is_active": true
    },
    {
      "is_active": true
    } 
   ]
 }
  

Есть идеи, как я могу получить размер, отображаемый в запросе?

Заранее спасибо.

Ответ №1:

Похоже, все, что мне нужно было добавить "inner_hits": {} в мой вложенный запрос:

 GET _search
{
  "_source": "innert_hits",
  "query": {
    "bool": {
      "must": [
        {"nested" : {
            "path" : "nested_objects",
            "query" : {
                "bool" : {
                    "should" :[
                      {"term" : {"nested_objects.is_active": true}}
                    ]
                }
            },
            "inner_hits": {},
            "score_mode": "sum"
        }}
      ]
    }
  }
}
  

Это не возвращает результат, который я хотел в моих вышеуказанных требованиях, но это достаточно хорошо для моего варианта использования.