#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 обращений, возвращенных мне