Запрос Elasticsearch возвращает 10 при ожидании> 10 000

#elasticsearch

#elasticsearch

Вопрос:

Я хочу получить все объекты JSON, в Elasticsearch которых есть null значение awsKafkaTimestamp . Это запрос, который я настроил:

 {
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "tracer.awsKafkaTimestamp"
        }
      }
    }
  }
}
  

Когда я обращаюсь к своей конечной точке elasticsearch с DSL помощью, я получаю только несколько значений обратно. Я ожидаю, что все (10000 ) из них, потому что я точно знаю, что все awsKafkaTimestamp значения null

Это ответ, который я получаю при использовании Postman . Как вы можете видеть, мне возвращено только 10 объектов JSON:

введите описание изображения здесь

Комментарии:

1. Вы должны указать «размер»

Ответ №1:

Это правильное поведение elasticsearch. По умолчанию он возвращает только 10 записей и предоставляет информацию в поле hits.total об общем количестве документов, соответствующих критериям поиска. Чтобы получить больше данных, чем 10, вы должны указать поле size в своем запросе, как показано ниже (подробнее об этом можно прочитать здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-from-size.html ):

 {
    "from" : 0, "size" : 10,
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}
  

Комментарии:

1. Это не приведет к получению всего набора результатов, поскольку параметр size ограничен 10000. Помимо этого числа вам следует использовать scroll api. Если вы установите его выше 10000, api вернет ошибку, связанную с этим.

Ответ №2:

По умолчанию elasticsearch выдаст вам 10 результатов, даже если они совпадают с 10212 . Вы можете установить параметр size, но он ограничен 10000, поэтому ваш единственный вариант — использовать scroll API для получения,

Пример из API прокрутки сайта elasticsearch

 curl -XGET 'localhost:9200/twitter/tweet/_search?scroll=1m' -d '
{
    "query": {
        "match" : {
            "title" : "elasticsearch"
        }
    }
}
'
  

Комментарии:

1. Это лучший ответ, однако у меня возникли проблемы с этим, поскольку я отправил сообщение в свою конечную точку elasticsearch ( http://{host}:{port}/_search?scroll=1m ), и я получил a _scroll_id , а также 10 обращений в ответ. Когда я отправлял сообщение http://{host}:{port}/_search/scroll , передавая объект {"scroll": "1m", "scroll_id": "{scroll_id}"} , я получаю только 10 обращений, возвращенных мне