как получить количество ненулевых значений на основе определенного поля в Elasticsearch

У меня есть эластичный поисковый индекс, и мне нужно общее количество записей, в которых одно из полей (actual_start) не равно нулю, как я могу это сделать?

Я написал этот запрос и хочу добавить количество ненулевых фактических начальных значений к результату моего запроса:

 $params = [
            'index' => "appointment_request",
            'body' => [
                'from' => $request['from'],
                'size' => $request['size'],
                "query" => [
                    "bool"=>[
                        "must" => [

                            [
                                "term" => [
                                    "doctor_id" => [
                                        "value" => $request['doctor_id']
                                    ]
                                ]
                            ],
                            [
                                "match" => [
                                    "book_date" => $request['book_date']

                                ]
                            ],
                      
                        ]

                    ],
                ]
            ]
        ];

person Farzane Khazaei    schedule 13.09.2020    source источник


Ответы (1)


Взгляните на Exists Query

Попробуй это:

GET <your-index>/_count
{
  "query": {
    "exists": {
      "field": "actual_start"
    }
  }
}

Затем вы можете прочитать значение count, которое даст вам общее количество записей, для которых actual_start не равно нулю.

Вы также можете заменить _count на _search, а значение total под hits даст вам общее количество (если вы также хотите hits).

Если вы хотите сделать наоборот (все записи, которые actual_start равны нулю):

GET <your-index>/_count
{
  "query": {
    "bool": {
      "must_not": [
        {
          "exists": {
            "field": "actual_start"
          }
        }
      ]
    }
  }
}

ОБНОВЛЕНИЕ

Если я вас правильно понял, вы хотите добавить к текущему запросу запрос exists.

Пример:

GET <your-index>/_search
{
  "query": {
    "bool": {
      "must": [
        {
          <put-your-query-here>
        },
        {
          "exists": {
            "field": "actual_start"
          }
        }
      ]
    }
  }
}
person Assael Azran    schedule 13.09.2020
comment
спасибо, но у меня есть другой запрос, и мне нужно добавить к нему количество ненулевых значений поля fact_start, также мне нужно общее количество, чтобы иметь количество всех записей в моем индексе, не могли бы вы помочь мне, как я могу это сделать? - person Farzane Khazaei; 13.09.2020
comment
Не могли бы вы поделиться своим запросом? что ты уже испробовал? - person Assael Azran; 13.09.2020
comment
Что вы имеете в виду, добавляя количество ненулевого фактического начального значения к результату моего запроса? если вы хотите, чтобы результат подсчета не был равен null fact_start, вам придется выполнить запрос exists как другой запрос. Elastic Search не поддерживает подзапросы. Если вы намеревались отфильтровать свой запрос с ненулевым полем fact_start, используйте запрос, который я написал в своем обновлении. - person Assael Azran; 13.09.2020
comment
Если вы найдете мое решение полезным, пожалуйста, не стесняйтесь голосовать/принимать ответ. - person Assael Azran; 13.09.2020