Проблема размера для моего запроса к ElasticSearch - PullRequest
0 голосов
/ 11 января 2019

Я делаю запрос к своему ES на Python, но могу получить только 10000 данных. Мне нужно будет восстановить гораздо больше (несколько сотен тысяч).

Я изменил переменную size, но она не может превышать 10.000

res_cpe = es.search(index=cpe_index, doc_type="entries", body = {
'size' : 10000,
'query': {
    'match_all' : {}
}
})

Я хотел бы, чтобы все записи были в моей переменной "res_cpe"

1 Ответ

0 голосов
/ 11 января 2019

Вы должны попытаться использовать Scroll API, который должен помочь вам получить большое количество результатов (или даже всех результатов, как в вашем случае).

Эта функциональность аналогична курсорам из традиционных баз данных.

Все, что вам нужно сделать, это добавить параметр scroll к вашему запросу в клиенте Python. Минимальный жизнеспособный пример может выглядеть так:

page = es.search(

index = 'yourIndex',

doc_type = 'yourType',

scroll = '2m',

search_type = 'query_then_fetch',

size = 1000,

body = {

//Your query's body

})

sid = page['_scroll_id']

scroll_size = page['hits']['total']

//Start scrolling

while (scroll_size > 0):

print "Scrolling..."

page = es.scroll(scroll_id = sid, scroll = '2m')

//Update the scroll ID

sid = page['_scroll_id']

//Get the number of results that we returned in the last scroll

scroll_size = len(page['hits']['hits'])

print "scroll size: " + str(scroll_size)

//Do something with the obtained page

Пример взят здесь - https://gist.github.com/drorata/146ce50807d16fd4a6aa

Ссылка на документы клиента Python - https://elasticsearch -py.readthedocs.io / en / master / api.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...