У меня ElasticSearch 5.2 и я использую python 3.5 для получения сообщений (только не получаю обновлений).У моих критериев поиска общее количество сообщений превышает 10000.
Я исследовал прокрутку, однако затраченное время слишком велико.
from elasticsearch import Elasticsearch
es = Elasticsearch([{'host': 'my-host', 'port': 9200}])
sBody = """
{
"query": {
"bool": {
"must": {
"match": {
"header.batchId": "batch_id_1"
}
}
}
}
}
"""
response = es.search(
index='index.name',
body=sBody,
scroll='2m'
)
scroll_id = response['_scroll_id']
out = []
while len(response['hits']['hits']):
response = es.scroll(scroll_id=scroll_id, scroll='2m')
out += response
print(out)
Всего сообщений в приведенном выше примере ~ 166500.
Когда я запускаю просто без прокрутки и задаю размер = 10000, я вижу, что сообщения удаляются довольно быстро.Конечно, это не все сообщения, что для меня бесполезно, но разница между 10000 и общим количеством сообщений невелика, но затраченное время велико.
Далее я попытался использоватьasticsearch_dsl
Дополнительный код:
from elasticsearch_dsl import Search, Q
from elasticsearch_dsl.query import Match
qx = Q({'bool': {'must': { 'match' : {'header.batchId' : 'batch_id_1'}}}})
s = Search(using=es, index="index.name").query(qx)
response = s.execute()
print('Total %d hits found.' % response.hits.total)
Приведенный выше код дает правильное общее количество сообщений.
Но когда я пытаюсь повторить ответ, он выдает только 10 сообщений по умолчанию.
Итак, что еще мне нужно сделать, чтобы получить все сообщения?
Есть ли другой способ лучше?